Variadic Variadic шаблоны шаблонов

В настоящее время я борюсь со следующим кодом, цель которого состоит в том, чтобы реализовать шаблоны шаблонов переменных переменных:

template
<
  template <typename... HeadArgs> class Head,
  template <typename... TailArgs> class...
>
struct join<Head<typename HeadArgs...>, Head<typename TailArgs...>...>
{
  typedef Head<typename HeadArgs..., typename TailArgs......> result;
};

В идеале я мог бы использовать эту метафункцию шаблона для достижения следующего:

template <typename...> struct obj1 {};
template <typename...> struct obj2 {};

typedef join
<
  obj1<int, int, double>, 
  obj1<double, char>,
  obj1<char*, int, double, const char*>
>::result new_obj1;

typedef join
<
  obj2<int, int, double>, 
  obj2<double, char>,
  obj2<char*, int, double, const char*>
>::result new_obj2;

/* This should result in an error, because there are 
   different encapsulating objects
typedef join
<
  obj1<int, int, double>, 
  obj1<double, char>,
  obj2<char*, int, double, const char*>
>::result new_obj;
*/

Мы надеемся, что результат вышеизложенного создастnew_obj1 а такжеnew_obj2 в видеtemplate<int, int, double, double, char, char*, int, double, const char*> struct new_obj[1|2] {};

Я использую gcc 4.6.2 в Windows, который выводит «ожидаемый пакет параметров перед« ... »« для расширения »Head<typename TailArgs...>... ".

Эта ошибка воспроизводится с помощью gcc 4.5.1..

Ответы на вопрос(1)

Ваш ответ на вопрос