On Friday, September 09, 2011 23:44:10 Timon Gehr wrote: > On 09/09/2011 11:42 PM, Jonathan M Davis wrote: > > On Friday, September 09, 2011 17:37:26 bearophile wrote: > >> Andrej Mitrovic: > >>> I need to have an object which is initialized only once, so I > >>> thought > >>> I could use immutable for that. But I can't do this: > >>> > >>> private class Foo {} > >>> immutable Foo foo; > >>> > >>> static this() > >>> { > >>> > >>> foo = new Foo; > >>> > >>> } > >>> > >>> void main() {} > >> > >> private class Foo {} > >> immutable Foo foo1; > >> > >> static this() { > >> > >> foo1 = new immutable(Foo); > >> > >> } > >> > >> void main() { > >> > >> auto foo2 = new immutable(Foo); > >> > >> } > > > > But make the constructor shared. Otherwise, it gets initialized once per > > thread in spite of the fact that immutable is implicitly shared. > > Shouldn't the compiler catch this?
It should, but it doesn't. http://d.puremagic.com/issues/show_bug.cgi?id=4923 http://d.puremagic.com/issues/show_bug.cgi?id=5207 http://d.puremagic.com/issues/show_bug.cgi?id=6114