This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Problem with braced-init-lists and explicit ctors
- From: Joaquin M Lopez Munoz <joaquinlopezmunoz at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Sun, 2 Feb 2014 09:08:15 +0000 (UTC)
- Subject: Problem with braced-init-lists and explicit ctors
- Authentication-results: sourceware.org; auth=none
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);
}
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){}
^
Is this a bug or am I missing some subtlety in the standard? Thank you,
JoaquÃn M LÃpez MuÃoz
TelefÃnica Digital