Hello, can anybody explain why the following code compiles with -version=works 
but not without?

module test;

import std.stdio;

abstract class Parent
{
        int opApply(int delegate(ref int) dg)
        {
                int fakeDelegate(ref uint fake, ref int content)
                        { return dg(content); }
                return opApply(&fakeDelegate);
        }
        
        abstract int opApply(int delegate(ref uint, ref int) dg);
}

class Child : Parent
{
        override int opApply(int delegate(ref uint, ref int) dg)
        {
                uint index = 0;
                for(int content = 1; content < 6; content++)
                {
                        int result = dg(index, content);
                        if(result != 0)
                                return result;
                        index++;
                }
                return 0;
        }
}

void main()
{
        version(works)
                Parent child = new Child();
        else
                Child child = new Child();
        foreach(int content; child)
                writefln(content);
}

I'm making some collection classes and had the same problem. It seems like for 
some reason the compiler can't match the index-free foreach() in the child, but 
can in the parent. It obviously knows it's there, or else it wouldn't compile 
because the index-free opApply would be abstract. Any thoughts?

Reply via email to