Как я могу вытащить аргументы вариативного шаблона из хвоста, а не из головы ?

По глупым причинам, я не буду здесь вдаваться в подробности, мне нужно, чтобы закомментированная строка работала, а строка над ней не работала:

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

Как я могу снимать элементы с хвоста, а не с головы?

9
задан Sydius 9 July 2011 в 03:30
поделиться