По глупым причинам, я не буду здесь вдаваться в подробности, мне нужно, чтобы закомментированная строка работала, а строка над ней не работала:
template<uint _N, typename... _Args>
struct PartialTuple;
template<uint _N, typename _Arg, typename... _Args>
struct PartialTuple<_N, _Arg, _Args...>: PartialTuple<_N-1, _Args...> {};
template<typename _Arg, typename... _Args>
struct PartialTuple<0, _Arg, _Args...>
{
typedef std::tuple<_Arg, _Args...> type;
};
int main()
{
// I want this to not work...
PartialTuple<1, std::string, std::string, int, int>::type A{"test", 5, 1};
// I want this to work...
//PartialTuple<1, std::string, std::string, int, int>::type B{"test", "test", 5};
}
Я попытался заменить _Arg
с _Args ...
, но это не будет компилироваться (по крайней мере, в GCC 4.6):
error: parameter pack argument ‘_Args ...’ must be at the end of the template argument list
Как я могу снимать элементы с хвоста, а не с головы?