digitalmars.D.bugs - [Issue 8978] New: Constructor is called instead of implicit cast when initializing from expression tuple
- d-bugmail puremagic.com (58/58) Nov 08 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8978
- d-bugmail puremagic.com (25/25) Nov 08 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8978
http://d.puremagic.com/issues/show_bug.cgi?id=8978 Summary: Constructor is called instead of implicit cast when initializing from expression tuple Product: D Version: D2 Platform: All OS/Version: All Status: NEW Keywords: wrong-code Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: verylonglogin.reg gmail.com --- Comment #0 from Denis Shelomovskij <verylonglogin.reg gmail.com> 2012-11-08 16:26:34 MSK --- The second `static assert` fails as `this(const S)` is called: --- template expressionTuple(expressions...) { alias expressions expressionTuple; } struct S { int* p; this(const S) { } } void main() { const S cs; static assert(!__traits(compiles, { S s = cs; })); // ok, cast is invalid alias expressionTuple!(cs) args; static assert(!__traits(compiles, { S s = args; })); // fails } --- Another example: --- template expressionTuple(expressions...) { alias expressions expressionTuple; } struct S { int i; this(S) { assert(0); } } void main() { alias expressionTuple!(S()) args; S s = args; // `assert(0);` is triggered } --- Workaround: --- alias expressionTuple!(...) args; static if(args.length == 1) S s = args[0]; else S s = args; --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 08 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8978 --- Comment #1 from Denis Shelomovskij <verylonglogin.reg gmail.com> 2012-11-08 16:49:42 MSK --- It also affects templates with tuple parameter: --- template expressionTuple(expressions...) { alias expressions expressionTuple; } struct S { int* p; this(const S) { } } void main() { const S cs; static assert(!__traits(compiles, { S s = cs; })); // ok, cast is invalid void f(Args...)(Args args) { static assert(!__traits(compiles, { S s = args; })); // fails } f(cs); } --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 08 2012