我最近遇到了这段代码:
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++ 推导出 as 的类型b
,std::initializer_list<Foo>
而g++5.1
推导出 asFoo
。AFAIK,这里的类型确实应该是(确实违反直觉)std::initializer_list
。为什么 g++5 将类型推断为Foo
?