Может быть, я упускаю что-то очевидное, но следующее компилируется и запускается, и я не уверен, почему. Я знаю об этом , но в приведенном ниже примере пакет параметров и аргумент по умолчанию меняются местами. Разве это не нарушает правило, согласно которому аргументы по умолчанию должны стоять последними? Пакет параметров не может иметь значение по умолчанию.
#include <iostream>
#include <string>
#include <tuple>
template<typename ... Ts>
struct Test
{
int i;
std::string str;
Test(int _i = 0, Ts&& ... _ts)
:
i(_i),
str(std::get<0>(std::forward_as_tuple(std::forward<Ts>(_ts)...)))
{}
};
int main()
{
Test<std::string> t(1, "huh??");
std::cout << "t.i = " << t.i << ", t.str = " << t.str << "\n";
return 0;
}
Это производит
t.i = 1, t.str = huh??