To jest punkt, o którym gcc 4.9.2 i clang 3.5.2 są ostry nieporozumienia. Program:Czy argumenty funkcji zestawu parametrów mogą być domyślne?
template<typename ...Ts>
int foo(int i = 0, Ts &&... args)
{
return i + sizeof...(Ts);
}
int main()
{
return foo();
}
kompiluje bez komentarza z gcc (-std=c++11 -Wall -pedantic
). Dzyń mówi:
error: missing default argument on parameter 'args'
Z foo
zmienione na:
template<typename ...Ts>
int foo(int i = 0, Ts &&... args = 0)
{
return i + sizeof...(Ts);
}
dzyń ma żadnych skarg, ale gcc mówi:
error: parameter pack ‘args’ cannot have a default argument
Który kompilator ma rację?
Można to obejść przez przeciążeniem: 'szablonu int foo (int i, TS && ...) {return i + sizeof ... (Ts); } inline int foo() {return foo (0); } ' –
Oktalist