[LLVMdev] initialization list with conversion operator dont work properly and report error

Eli Friedman eli.friedman at gmail.com
Tue Sep 24 16:59:47 PDT 2013


On Mon, Sep 23, 2013 at 11:43 PM, Mayur Pandey <mayurthebond at gmail.com>wrote:

> for the following code:
>
> struct X
> {
>   X();
> };
>
> struct Y
> {
>   operator X() const;
> };
>
> X a = { Y() };    // reports error: no matching constructor for
> initialization of 'X'
> X aa = Y();  // works fine
>
>
> clang when compiled with std=c++11 gives compilation errors as:
>
>
> testfile.C:11:3: error: no matching constructor for initialization of 'X'
> X a = { Y() };    // reports error: no matching constructor for
> initialization of 'X'
>   ^   ~~~~~~~
> testfile.C:1:8: note: candidate constructor (the implicit copy
> constructor) not viable: no known conversion from 'Y' to 'const X &' for 1st
>       argument
> struct X
>        ^
> testfile.C:1:8: note: candidate constructor (the implicit move
> constructor) not viable: no known conversion from 'Y' to 'X &&' for 1st
>       argument
> struct X
>        ^
> testfile.C:3:3: note: candidate constructor not viable: requires 0
> arguments, but 1 was provided
>   X();
>   ^
> 1 error generated.
>
>
See C++11 [over.best.ics]p4.  We could probably improve the diagnostic
here, though; please file a bug.

-Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130924/1477a542/attachment.html>


More information about the llvm-dev mailing list