http://d.puremagic.com/issues/show_bug.cgi?id=9051
--- Comment #2 from Dmitry Olshansky <dmitry.o...@gmail.com> 2012-11-21 10:49:17 PST --- (In reply to comment #1) > The error message is not coming from CTFE. Here's a simple case from a comment > in the compiler source code (declaration.c): > > /* The problem is the following code: > * struct CopyTest { > * double x; > * this(double a) { x = a * 10.0;} > * this(this) { x += 2.0; } > * } > * const CopyTest z = CopyTest(5.3); // ok > * const CopyTest w = z; // not ok, postblit not run > * static assert(w.x == 55.0); > * because the postblit doesn't get run on the initialization of w. > */ > > I think that if we didn't call this(this), wrong code would result. I agree in general. And But given that getMeASet(uint[] arr) is an r-value. Surely the result of it should be just moved? The other thought is: can't this(this) be run at compile-time then? What are limitations? > There is at least a diagnostic bug here - if it must behave this way, the code > that creates the comma expression should be issuing the error. > > Interestingly, if you move it inside a function, the result is different: > The same thing happens if you try passing set by reference be it const or otherwise. > void foo() > { > pragma(msg, getSecond(set)); > } > > qqq.d(19): Error: static variable set cannot be referenced at compile time > qqq.d(19): called from here: __cpcttmp6.__cpctor(set) > qqq.d(19): called from here: getSecond((const const(Set) __cpcttmp6 = > __cpcttmp6.__cpctor(set); > , __cpcttmp6)) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------