On Friday, 17 January 2014 at 02:04:27 UTC, Andrei Alexandrescu wrote:
Yah, that would be expected.

Yeah, but I think people would find it weird. This kind of thing is actually possible today:

class Foo { }

class Bar {
Foo foo = new Foo(); // this gets a static reference into the typeinfo.init (since new Foo is evaluated at compile time!) which is blitted over...
}

void main() {
auto bar = new Bar(); // bar.foo is blitted to point at the static Foo
        auto bar2 = new Bar(); // and same thing
assert(bar.foo is bar2.foo); // passes, but that's kinda weird
}


Granted, maybe the weirdness here is because the variable isn't static, so people expect it to be different, but I saw at least one person on the chat room be very surprised by this - and I was too, until I thought about how CTFE and Classinfo.init is implemented, then it made sense, but at first glance it was a bit weird.

I think people would be a bit surprised if it was "Foo foo;" as well using the proposed .init thingy.

Reply via email to