On Sat, Jul 14, 2012 at 1:36 PM, Guillaume Chatelet <chatelet.guillaume@gmail.com> wrote:
On 07/13/12 21:41, Andrei Alexandrescu wrote:
> On 7/13/12 3:36 PM, Gor Gyolchanyan wrote:
>> The initial question was: why does DMD 2.059 reject this if this makes
>> sense?
>> It's not even a new feature. It's a (possibly) new (and apparently
>> sensible) use case of an existing feature.
>
> I think the simple answer is there was no provision for it. The feature
> copies the Java feature, and I don't think Java has something like what
> you defined.
>
> Andrei
>

class Fruit {
    class Seed {
    }
}

class Apple extends Fruit {
    class AppleSeed extends Fruit.Seed {
        Apple getOuter() {
            return Apple.this;
        }
    }
}

class Main {
    public static void main(String[] args) {
        final Apple apple = new Apple();
        final Apple.AppleSeed appleSeed = apple.new AppleSeed();
        assert (appleSeed instanceof Fruit.Seed);
        assert (apple == appleSeed.getOuter());
        assert (appleSeed.getOuter() instanceof Apple);
        assert (appleSeed.getOuter() instanceof Fruit);
    }
}

This is valid Java code actually and I agree with Gor I would have
expected it to work with D.

Guillaume

I didn't even know this worked in Java. This means, that nested classed in D can't translate nested classed in Java after all.

--
Bye,
Gor Gyolchanyan.