我正在阅读由Leor Zolman先生演示的C++11和C++14概述幻灯片。在第35页,他介绍了使用decltype
进行求和操作的方法。
struct Sum {
template <typename T>
static T sum(T n) {
return n;
}
template <typename T, typename... Args>
/// static T sum(T n, Args... rest) {
static auto sum(T n, Args... rest) -> decltype(n + sum(rest...)) {
return n + sum(rest...);
}
};
当使用这个片段
Sum::sum(1, 2.3, 4, 5);
时,clang-3.6(来自svn)无法使用-std=c++11
/-std=c++1y
编译,但是gcc-4.9可以成功编译。当然,在没有返回类型推断的情况下,两者都可以编译,但这涉及类型转换,无法得到预期的结果。那么,这是否表明了clang的bug,还是因为gcc扩展(关于c++11或c++14)?