Это точка, о которой 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
). Кланг говорит:
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
Какой компилятор прав?