http://d.puremagic.com/issues/show_bug.cgi?id=6768
Summary: Problem with init of struct members in presence of templated opAssign Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Severity: critical Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: andrej.mitrov...@gmail.com --- Comment #0 from Andrej Mitrovic <andrej.mitrov...@gmail.com> 2011-10-04 19:14:34 PDT --- module test; import std.traits; import std.stdio; struct Point { int x, y; void delegate() dg; // void opAssign(void delegate() rhs) // ok, x and y initialized // { // dg = rhs; // } void opAssign(T)(T rhs) if (isDelegate!T) // x and y left uninitialized { dg = rhs; } void test() { dg(); } } class Foo { this() { point = { writefln("Point: %s", point); }; // assign delegate } Point point; } void main() { auto foo = new Foo; foo.point.dg(); // x and y are initialized foo.point.test(); // but here x and y are not initialized (??) foo.point.dg(); // again, not initialized (??) } I don't understand how calling dg() directly or indirectly via test() prints different results for x and y. If I use the non-templated version of opAssign then both calls are fine, with x and y being zero-inited. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------