Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
May 19, 2012 [Issue 8118] New: Impossible to initialize a member struct without default constructor or assigment | ||||
---|---|---|---|---|
| ||||
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 --- Comment #0 from wfunction@hotmail.com 2012-05-18 17:05:19 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. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 19, 2012 [Issue 8118] Impossible to initialize a member struct without default constructor or assigment | ||||
---|---|---|---|---|
| ||||
Posted in reply to wfunction@hotmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=8118 --- Comment #1 from wfunction@hotmail.com 2012-05-18 17:05:45 PDT --- 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 19, 2012 [Issue 8118] Impossible to initialize a member struct without default constructor or assigment | ||||
---|---|---|---|---|
| ||||
Posted in reply to wfunction@hotmail.com | 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 --- Comment #2 from Dmitry Olshansky <dmitry.olsh@gmail.com> 2012-05-19 03:44:28 PDT --- (In reply to comment #0) > 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 [Issue 8118] Impossible to initialize a member struct without default constructor or assigment | ||||
---|---|---|---|---|
| ||||
Posted in reply to wfunction@hotmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=8118 --- Comment #3 from wfunction@hotmail.com 2012-05-19 12:15:42 PDT --- (In reply to comment #2) > 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. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 19, 2012 [Issue 8118] Impossible to initialize a member struct without default constructor or assigment | ||||
---|---|---|---|---|
| ||||
Posted in reply to wfunction@hotmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=8118 --- Comment #4 from wfunction@hotmail.com 2012-05-19 12:17:48 PDT --- (In reply to comment #3) > (In reply to comment #2) > > 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. For 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: ------- |
February 15, 2013 [Issue 8118] Impossible to initialize a member struct without default constructor or assigment | ||||
---|---|---|---|---|
| ||||
Posted in reply to wfunction@hotmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=8118 Marco Leise <Marco.Leise@gmx.de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |Marco.Leise@gmx.de --- Comment #5 from Marco Leise <Marco.Leise@gmx.de> 2013-02-15 06:17:42 PST --- (In reply to comment #4) > 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. 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: ------- |
Copyright © 1999-2021 by the D Language Foundation