Возможно, мне не хватает чего-то очевидного, но следующие компилируются и запускаются, и я не уверен, почему. Я знаю этот, но в приведенном ниже примере позиция пакета параметров и аргумент по умолчанию отменены. Не нарушает ли это правило, что аргументы по умолчанию должны появляться последними? Пакет параметров не может иметь значения по умолчанию.
#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??