[Issue 5769] New: struct elaborate constructor should make rvalue
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Mar 23 05:37:22 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5769
Summary: struct elaborate constructor should make rvalue
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: k.hara.pg at gmail.com
--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2011-03-23 05:34:02 PDT ---
Struct literal/constructor call should make rvalue.
Related issue is issue5178.
Test code:
----
struct S // has default parameterized constructor
{
int n;
}
struct T // has normal constructor
{
this(int n){}
// ref T __ctor(int n){ return this; } // dmd generates internally like this
}
struct T2
{
template __ctor() // workaround
{
T2 __ctor(int n){ return this; } // return copied rvalue
}
}
// lvalue checker
bool checker(T...)(auto ref T t){ return __traits(isRef, t[0]); }
import std.stdio;
void main()
{
int n = 20;
S s = S(20);
T t = T(20);
T2 t2 = T2(20);
writefln("%s / %s", checker( 10) , checker( n)); // false/true, ok
writefln("%s / %s", checker( S(10)), checker( s)); // true /true, NG
(Fixed by issue5178 patch)
writefln("%s / %s", checker( T(10)), checker( t)); // true /true, NG!!!
writefln("%s / %s", checker(T2(10)), checker(t2)); // false/true, ok
}
----
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list