这是关于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();
}
Run Code Online (Sandbox Code Playgroud)
编译没有gcc(-std=c++11 -Wall -pedantic)的评论.Clang说:
error: missing default argument on parameter 'args'
Run Code Online (Sandbox Code Playgroud)
随着foo修订为:
template<typename ...Ts>
int foo(int i = 0, Ts &&... args = 0)
{
return i + sizeof...(Ts);
}
Run Code Online (Sandbox Code Playgroud)
clang没有抱怨,但gcc说:
error: parameter pack ‘args’ cannot have a default argument
Run Code Online (Sandbox Code Playgroud)
哪个编译器是对的?