Mayur Pandey
2013-Sep-25 13:34 UTC
[LLVMdev] initialization list with conversion operator dont work properly and report error
Actually it should have not thrown error at all. it works fine with gcc. And the part of code which you mentioned is not getting hit at all. Maybe some difference in parsing is there. On Wed, Sep 25, 2013 at 5:29 AM, Eli Friedman <eli.friedman at gmail.com>wrote:> 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 >-- Thanx & Regards *Mayur Pandey * Senior Software Engineer Samsung India Software Operations Bangalore +91-9742959541 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130925/86e180b8/attachment.html>
Eli Friedman
2013-Sep-25 21:46 UTC
[LLVMdev] initialization list with conversion operator dont work properly and report error
I'm not really an overload resolution expert, so I could be wrong. Anyway, please file a bug report (http://llvm.org/bugs/), and our overload resolution experts will take a look. :) -Eli On Wed, Sep 25, 2013 at 6:34 AM, Mayur Pandey <mayurthebond at gmail.com>wrote:> Actually it should have not thrown error at all. it works fine with gcc. > And the part of code which you mentioned is not getting hit at all. Maybe > some difference in parsing is there. > > > On Wed, Sep 25, 2013 at 5:29 AM, Eli Friedman <eli.friedman at gmail.com>wrote: > >> 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 >> > > > > -- > Thanx & Regards > *Mayur Pandey * > Senior Software Engineer > Samsung India Software Operations > Bangalore > +91-9742959541 > > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130925/0a91a871/attachment.html>
Mayur Pandey
2013-Oct-11 12:09 UTC
[LLVMdev] initialization list with conversion operator dont work properly and report error
what i think could be the possible error is that while evaluating our
expression X a = {Y()}; , in the function InitializationSequence we call
the function which in turn calls TryListInitialization function, which
evaluates all the possible contructors for overloading, but does not check
for conversion functions. so TryListInitialization reports failure in
finding any candidate function for overloading.
whereas in the code flow for X aa = Y(); the the function
TryUserDefinedConversion is called from InitializationSequence which is
able to properly get the candidate function.
So maybe we should call TryUserDefinedConversion from within the
TryListInitialization function passing Y() of the initlist in the cases
when normal overloading is failing.
Please suggest.
On Thu, Sep 26, 2013 at 3:16 AM, Eli Friedman <eli.friedman at
gmail.com>wrote:
> I'm not really an overload resolution expert, so I could be wrong.
> Anyway, please file a bug report (http://llvm.org/bugs/), and our
> overload resolution experts will take a look. :)
>
> -Eli
>
> On Wed, Sep 25, 2013 at 6:34 AM, Mayur Pandey <mayurthebond at
gmail.com>wrote:
>
>> Actually it should have not thrown error at all. it works fine with
gcc.
>> And the part of code which you mentioned is not getting hit at all.
Maybe
>> some difference in parsing is there.
>>
>>
>> On Wed, Sep 25, 2013 at 5:29 AM, Eli Friedman <eli.friedman at
gmail.com>wrote:
>>
>>> 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
>>>
>>
>>
>>
>> --
>> Thanx & Regards
>> *Mayur Pandey *
>> Senior Software Engineer
>> Samsung India Software Operations
>> Bangalore
>> +91-9742959541
>>
>>
>>
>>
>
>
--
Thanx & Regards
*Mayur Pandey *
Senior Software Engineer
Samsung India Software Operations
Bangalore
+91-9742959541
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20131011/1b309a9a/attachment.html>
Possibly Parallel Threads
- [LLVMdev] initialization list with conversion operator dont work properly and report error
- [LLVMdev] initialization list with conversion operator dont work properly and report error
- [LLVMdev] initialization list with conversion operator dont work properly and report error
- [LLVMdev] operator overloading fails while debugging with gdb for i386
- [LLVMdev] operator overloading fails while debugging with gdb for i386