On Wednesday, September 14, 2022 at 6:34:23 PM UTC+2, Maciek wrote:
> kompilator nie chce rozwinąć funkcji i nie pasuje mu liczba argumentów
Nie może rozwinąć funkcji, bo ona jest w jednym wariancie. Parametryzację
masz na poziomie klasy, nie metody.
> Na czym polega mój błąd ?
Tak pi*drzwi sygnatura tej jednej metody to (int, int, int , int),
bo T = int, Types = {int, int, int}.
Więc to co się teraz dzieje w Twoim kodzie:
T_Operators_tests<int,int,int,int>::print(int val, {int, int, int} args)
{
std::cout << val;
print(args[0], args[1], args[2]);
}
Nie masz *w klasie* metody print(int, int, int) i to właśnie napisał Ci kompilator:
"no overloaded function takes 3 arguments".
Rozwiązanie to niezależnie od klasy sparametryzować metodę `print`:
template <typename U, typename... TU>
void print(U val, TU... args) {
// ...
}
BTW, doczytaj o perfect forwarding, bo przekazywanie
wartości w C++ to proszenie się o kłopoty.
w.