digitalmars.D.bugs - [Issue 8118] New: Impossible to initialize a member struct without default constructor or assigment
- d-bugmail puremagic.com (33/33) May 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8118
- d-bugmail puremagic.com (7/7) May 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8118
- d-bugmail puremagic.com (14/37) May 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8118
- d-bugmail puremagic.com (8/13) May 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8118
- d-bugmail puremagic.com (10/21) May 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8118
- d-bugmail puremagic.com (23/25) Feb 15 2013 http://d.puremagic.com/issues/show_bug.cgi?id=8118
http://d.puremagic.com/issues/show_bug.cgi?id=8118 Summary: Impossible to initialize a member struct without default constructor or assigment Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: critical Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: wfunction hotmail.com struct S { disable this(); this(int) { } disable void opAssign(typeof(this)); } class Test { S s = void; // I *EXPLICITLY* told it not to be initialized, but... this() { s = S(to!int("1")); } } void main() { new Test(); } Error: function S.opAssign is not callable because it is annotated with disable Error: default construction is disabled for type Test Structs without default constructors are pretty much impossible to use. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 18 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8118 Possibly related: http://d.puremagic.com/issues/show_bug.cgi?id=8117 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 18 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8118 Dmitry Olshansky <dmitry.olsh gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dmitry.olsh gmail.com 03:44:28 PDT ---struct S { disable this(); this(int) { } disable void opAssign(typeof(this)); } class Test { S s = void; // I *EXPLICITLY* told it not to be initialized, but... this() { s = S(to!int("1")); } } void main() { new Test(); } Error: function S.opAssign is not callable because it is annotated with disable Error: default construction is disabled for type Test Structs without default constructors are pretty much impossible to use.No bug here you just diabled too much. Undisable opAssign. It's opAssign that gets called whne a = ... is seen: this() { s = S(to!int("1")); } If opAssign is trivial it replaced with bitblit. (that is disable comes first!) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8118No bug here you just diabled too much. Undisable opAssign. It's opAssign that gets called whne a = ... is seen: this() { s = S(to!int("1")); } If opAssign is trivial it replaced with bitblit. (that is disable comes first!)Uh, no, it's a bug IMO. I never asked for an assignment. I want to CONSTRUCT the object manually. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8118For example, pretend this is the Scoped struct. I *obviously* wouldn't want to assign anything, but I'd want to construct the object. The fact that it's **impossible** to call the constructor directly without an assignment getting in the way (as far as I see) is a bug. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------No bug here you just diabled too much. Undisable opAssign. It's opAssign that gets called whne a = ... is seen: this() { s = S(to!int("1")); } If opAssign is trivial it replaced with bitblit. (that is disable comes first!)Uh, no, it's a bug IMO. I never asked for an assignment. I want to CONSTRUCT the object manually.
May 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8118 Marco Leise <Marco.Leise gmx.de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |Marco.Leise gmx.deThe fact that it's **impossible** to call the constructor directly without an assignment getting in the way (as far as I see) is a bug.I agree with you. I have a struct that is not supposed to be copied. Now I cannot use it as a field in any other struct/class. In some cases a work-around may be to allow assignments, but check that the receiver is S.init. Also I tried "= void" first. So it may be the most intuitive to use for the bug fix. I haven't checked, but it could allow code like this if not currently possible: S s = void; if (xyz) { s = S(3); } else { s = S(7); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 15 2013