Dies ist ein Punkt, über den gcc 4.9.2 und clang 3.5.2 in scharfen Meinungsverschiedenheiten sind. Das Programm:Können Argumente für Parameterpakete-Funktionen voreingestellt werden?
template<typename ...Ts>
int foo(int i = 0, Ts &&... args)
{
return i + sizeof...(Ts);
}
int main()
{
return foo();
}
kompiliert ohne Kommentar von gcc (-std=c++11 -Wall -pedantic
). Clang sagt:
error: missing default argument on parameter 'args'
Mit foo
geändert:
template<typename ...Ts>
int foo(int i = 0, Ts &&... args = 0)
{
return i + sizeof...(Ts);
}
Klirren hat keine Beschwerden, aber gcc sagt:
error: parameter pack ‘args’ cannot have a default argument
Welche Compiler ist richtig?
mit Man könnte es umgehen, durch Überlastung: 'template int foo (int i, Ts && ...) {return i + sizeof ... (Ts); } Inlineinhalt foo() {return foo (0); } ' –
Oktalist