【发布时间】:2015-05-19 20:47:46
【问题描述】:
这是 gcc 4.9.2 和 clang 3.5.2 的重点 分歧。程序:
template<typename ...Ts>
int foo(int i = 0, Ts &&... args)
{
return i + sizeof...(Ts);
}
int main()
{
return foo();
}
编译时没有来自 gcc (-std=c++11 -Wall -pedantic) 的注释。 Clang 说:
error: missing default argument on parameter 'args'
foo 修改为:
template<typename ...Ts>
int foo(int i = 0, Ts &&... args = 0)
{
return i + sizeof...(Ts);
}
clang 没有抱怨,但 gcc 说:
error: parameter pack ‘args’ cannot have a default argument
哪个编译器是正确的?
【问题讨论】:
-
你可以通过重载来解决它:
template <typename... Ts> int foo(int i, Ts&&...) { return i + sizeof...(Ts); } inline int foo() { return foo(0); }
标签: c++ c++11 gcc clang variadic-templates