[Issue 6768] New: Problem with init of struct members in presence of templated opAssign
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Oct 4 19:15:16 PDT 2011
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: nobody at puremagic.com
ReportedBy: andrej.mitrovich at gmail.com
--- Comment #0 from Andrej Mitrovic <andrej.mitrovich at 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: -------
More information about the Digitalmars-d-bugs
mailing list