【发布时间】:2015-07-09 06:54:47
【问题描述】:
当我用 clang 编译下面的代码时,gcc T 的推论不同。
#include<initializer_list> //for clang
//to see how T is deduced(form compiler error).
template<typename T>
void foo(T);
int main() {
auto var1{2};
foo(var1);
}
这是我得到的。
clang 3.6(c++11/c++14)
gcc 4.9(c++11/c++14)
T = std::initializer_list<int>
gcc 5.1(c++11/c++14)
T = int
我认为T 应该是std::initializer_list<int>。
为什么T = int 在 gcc 5.1 中?
【问题讨论】:
-
如果我没记错的话,这个区域的 C++11 和 C++14 之间的规范有一个变化(甚至可能是后期的变化)——我会试着找到一个链接为它。
-
值得注意的是,clang3.6 中的 C++14 支持绝对“不完整”,我希望这同样适用于 gcc 4.9 - 也可能是 5.0。因此,如果它是“规范中的后期”或只是“尚未实现的东西”,它很可能会在新版本中发生变化。