Poniższy kod kompiluje się i działa poprawnie.Zestaw parametrów szablonu funkcji nie znajduje się na końcu listy parametrów
void foo() {
}
template <typename T, typename... Args>
void foo(T x, Args... args) {
cout << x << endl;
foo(args...);
}
// inside main()
foo(1,1,1);
Ten drugi kod nie kompilacji:
void foo() {
}
template <typename... Args, typename T>
void foo(Args... args, T x) {
foo(args...);
cout << x << endl;
}
// inside main()
foo(1,1,1);
Kompilator mówi, że nie ma pasującej funkcji dla wywołania do foo(1,1,1)
i mówi, że foo(Args... args, T x)
jest kandydatem, ale szablon argumentu odliczenie/substytucja nie powiodła się, ponieważ kandydat oczekuje 1 argumentu, ale 3 zostały dostarczone.
Czy istnieje jakaś niejednoznaczność w tej sytuacji, której nie poradzi sobie żaden kompilator? Ten błąd kompilacji wydaje mi się nielogiczny. Być może nie jest to zgodne, celowo, ze standardem C++?
To jest po prostu "kompilacja nie implementująca standardu poprawnie" sytuacji? – matheuscscp
@matheuscscp, Nie, standard też na to nie zezwala. – chris
Dziękuję wam! – matheuscscp