I recently came upon this code:
struct Foo{};
int main()
{
Foo a;
// clang++ deduces std::initializer_list
// g++5.1 deduces Foo
auto b{a};
a = b;
}
It compiles fine with g++5.1, but fails in clang++ (used both -std=c++11
and -std=c++14
, same results). The reason is that clang++ deduces the type of b
as std::initializer_list<Foo>
, whereas g++5.1
deduces as Foo
. AFAIK, the type should indeed be (counter-intuitive indeed) std::initializer_list
here. Why does g++5 deduces the type as Foo
?
-std=c++11
and-std=c++14
– Taviac++11
– Tavia-std-c++11
or-std=c++14
are used, then I'd say yes. – Teatimeinitializer_list
. The rules changed a bit as mentioned in the answer. – Tavia