digitalmars.D.bugs - [Issue 3557] New: Pure function cannot call struct constructor
- d-bugmail puremagic.com Nov 29 2009
- d-bugmail puremagic.com Jan 10 2010
- d-bugmail puremagic.com Jan 11 2010
- d-bugmail puremagic.com Jan 11 2010
- d-bugmail puremagic.com Jan 12 2010
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 --- Comment #0 from Tomasz Sowiński <tomeksowi gmail.com> 2009-11-29 03:19:44 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 --- Comment #1 from Don <clugdbug yahoo.com.au> 2010-01-10 11:54:44 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. -- 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 --- Comment #2 from Tomasz Sowiński <tomeksowi gmail.com> 2010-01-11 13:33:40 PST --- (In reply to comment #1)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 --- Comment #3 from Tomasz Sowiński <tomeksowi gmail.com> 2010-01-11 13:40:33 PST --- (In reply to comment #2)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 pure --- Comment #4 from Don <clugdbug yahoo.com.au> 2010-01-12 02:20:30 PST --- (In reply to comment #3)(In reply to comment #2)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); } }
That's bug 3573. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 12 2010









d-bugmail puremagic.com 