Czy ten kod jest dobrze sformułowany? Deklaracja samego szablonu funkcji powoduje błąd zarówno w klangu, jak iw gcc, nawet jeśli Ts
może być pusty.Wiele rozszerzeń w pakiecie w klasie o stałej liczbie argumentów szablonu
// error: too many template arguments for class template 'pair'
template<class I, class U, class... Ts>
void f(std::pair<I,U,Ts...>);
int main()
{
f(std::pair<int,int>());
}
Wywołanie funkcji daje ten błąd w gcc, które nie ma sensu. Nie ma konwersja do int
:
note: cannot convert 'std::pair<int, int>()' (type 'std::pair<int, int>') to type 'int'
Spróbuj użyć std :: tuple zamiast std :: pair, jeśli używasz więcej niż 2 argumenty. –