digitalmars.D.bugs - [Issue 3557] New: Pure function cannot call struct constructor
- d-bugmail puremagic.com (33/33) Nov 29 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3557
- d-bugmail puremagic.com (20/20) Jan 10 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3557
- d-bugmail puremagic.com (18/31) Jan 11 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3557
- d-bugmail puremagic.com (18/19) Jan 11 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3557
- d-bugmail puremagic.com (12/28) Jan 12 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3557
- d-bugmail puremagic.com (13/13) Jul 14 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3557
http://d.puremagic.com/issues/show_bug.cgi?id=3557 Summary: Pure function cannot call struct constructor Product: D Version: 2.036 Platform: x86 OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: tomeksowi gmail.com PST --- struct A { float f; this (float f) { this.f = f; } static pure A stworz(float f) { return A(f); } } The above doesn't compile: Error: pure function 'stworz' cannot call impure function 'this' What's interesting, if stworz signature is one of the below: static pure stworz(float f); static pure auto stworz(float f); then it merrily compiles. So it's sth about the explicit return type. If I remove the constructor, it also compiles. If A is a class, it also compiles. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 29 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3557 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |rejects-valid CC| |clugdbug yahoo.com.au It shouldn't compile, since the constructor isn't marked as pure. But if you mark the constructor as pure: pure { this (float f) { this.f = f; } } you get: bug.d(14): Error: cannot modify const/immutable/inout expression this.f So we definitely have a problem. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 10 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3557 PST ---It shouldn't compile, since the constructor isn't marked as pure. But if you mark the constructor as pure: pure { this (float f) { this.f = f; } } you get: bug.d(14): Error: cannot modify const/immutable/inout expression this.f So we definitely have a problem.Yes, I had a feeling compiler should let me have pure ctors.. What about the problem I mentioned at the bottom (if A is a class): class A { float f; this (float f) { // NOT pure this.f = f; } static pure A stworz(float f) { return new A(f); } } This compiles. Should it? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 11 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3557 PST ---This compiles. Should it?I'm now confident it shouldn't: string global; class A { float f; this (float f) { // NOT pure this.f = f; global = "BUGABUGA!"; } static pure A stworz(float f) { return new A(f); } } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 11 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3557 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Pure function cannot call |Struct constructors cannot |struct constructor |be declared as pureThat's bug 3573. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------This compiles. Should it?I'm now confident it shouldn't: string global; class A { float f; this (float f) { // NOT pure this.f = f; global = "BUGABUGA!"; } static pure A stworz(float f) { return new A(f); } }
Jan 12 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3557 yebblies <yebblies gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |yebblies gmail.com Resolution| |FIXED Marking constructors as pure works in current dmd (2.054). I've put the other case as Issue 6320 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 14 2011