Questo è un punto su cui gcc 4.9.2 e clang 3.5.2 sono in netto disaccordo . Il programma:Gli argomenti della funzione del pacchetto parametri possono essere impostati in modo predefinito?
template<typename ...Ts>
int foo(int i = 0, Ts &&... args)
{
return i + sizeof...(Ts);
}
int main()
{
return foo();
}
compila senza commento da gcc (-std=c++11 -Wall -pedantic
). Clang dice:
error: missing default argument on parameter 'args'
Con foo
modificato a:
template<typename ...Ts>
int foo(int i = 0, Ts &&... args = 0)
{
return i + sizeof...(Ts);
}
clang ha nessuna lamentela, ma gcc dice:
error: parameter pack ‘args’ cannot have a default argument
quale compilatore è giusto?
Si potrebbe lavorare intorno ad esso da sovraccarico: 'template int foo (int i, Ts && ...) {return i + sizeof ... (Ts); } inline int foo() {return foo (0); } ' –
Oktalist