digitalmars.D.bugs - [Issue 15347] New: error message for converting return value with
- via Digitalmars-d-bugs (51/51) Nov 16 2015 https://issues.dlang.org/show_bug.cgi?id=15347
https://issues.dlang.org/show_bug.cgi?id=15347 Issue ID: 15347 Summary: error message for converting return value with ctor/dtor is horrible Product: D Version: D2 Hardware: All OS: All Status: NEW Keywords: diagnostic Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: schveiguy yahoo.com Simple example: struct S(T) { T *t; immutable(S) foo(T* x) { return S(x);} } S!int s; The error message is as follows: Error: cannot implicitly convert expression (S(x)) of type S!int to immutable(S!int) Reasonable, straightforward message. But it starts breaking down as we add ctor and dtor: struct S(T) { T *t; this(T *x) { t = x;} immutable(S) foo(T* x) { return S(x);} } Error: cannot implicitly convert expression (S(null).this(x)) of type S!int to immutable(S!int) Not sure where the S(null).this(x) comes from. Add a dtor and it's even worse: struct S(T) { T *t; this(T *x) { t = x;} ~this() {} immutable(S) foo(T* x) { return S(x);} } Error: cannot implicitly convert expression (( S!int __slS51 = S(null); , __slS51).this(x)) of type S!int to immutable(S!int) That carriage return is actually in the output. I don't even think that's valid D code (semicolon followed by comma). All three of these should look like the first one. Note that just a dtor does not affect the output. Tested as far back as 2.067.1 --
Nov 16 2015