我最近发现了这段代码:
struct Foo{};
int main()
{
Foo a;
// clang++ deduces std::initializer_list
// g++5.1 deduces Foo
auto b{a};
a = b;
}
用g ++ 5.1编译好,但在clang ++中失败(同时使用-std=c++11
和-std=c++14
,结果相同)。原因是clang++ deduces the type of b
as std::initializer_list<Foo>
,而g++5.1
deduces as Foo
。 AFAIK,类型确实应该(反直觉)std::initializer_list
这里。为什么g ++ 5将类型推断为Foo
?