Re: Problem with braced-init-lists and explicit ctors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hmm, so it seems MSVC isn't the only compiler with initializer list issues... ?

On Sun, Feb 2, 2014 at 3:26 AM, Marc Glisse <marc.glisse@xxxxxxxx> wrote:
> On Sun, 2 Feb 2014, Joaquin M Lopez Munoz wrote:
>
>> Using GCC 4.8 -std=c++11. The following overload resolution is not
>> ambiguous as bar::bar is explicit, which is fine:
>>
>> struct foo
>> {
>>  foo(int){}
>> };
>>
>> struct bar
>> {
>>  explicit bar(int){}
>> };
>>
>> void f(foo){}
>> void f(bar){}
>>
>> int main()
>> {
>>  f(0);
>> }

My question is, to borrow a coined phrase, how do you "reason" about
this one? Which version of "f" would you expect to be called, and why
would that be practical anyway, potentially confusing foo with bar?

>> But if I change the call statement to
>>
>> int main()
>> {
>>  f({0});
>> }
>>
>> then I get
>>
>> main.cpp:16:8: error: call of overloaded 'f(<brace-enclosed initializer
>> list>)' is ambiguous
>>   f({0});
>>        ^
>> main.cpp:16:8: note: candidates are:
>> main.cpp:11:6: note: void f(foo)
>> void f(foo){}
>>      ^
>> main.cpp:12:6: note: void f(bar)
>> void f(bar){}
>>      ^

So in other words, my question would be, is this truly a bug? Or are
you rightly being slapped for wanting to confuse the issue? In other
words, which is the bug? A "confused" (overloaded) function signature,
or a "confused" (potentially) end-user usage.

>> Is this a bug or am I missing some subtlety in the standard? Thank you,
>
>
> If there is a subtlety, clang and intel are missing it since they accept the
> code. Please file this in bugzilla.
>
> --
> Marc Glisse




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux