http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53108
Bug #: 53108 Summary: Nested template classes and variadic templates Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: fpellicci...@gmail.com //Begin Code---------------------------------------------------- #include <cstring> namespace my_types { struct nil {}; template <typename T, typename U> struct chain { typedef T first_type; typedef U second_type; }; } template <template <typename, typename> class Chain, typename Nil> struct chain_generator { template <typename T, typename... Args> struct gen { private: template <size_t S = sizeof...(Args), typename Dummy = void> struct inner { typedef Chain<T, typename gen<Args...>::type > type; }; template <typename Dummy> struct inner<0, Dummy> { typedef Chain<T, Nil> type; }; public: typedef typename inner<sizeof...(Args)>::type type; }; }; int main( /* int argc, char* argv[] */ ) { using my_types::chain; using my_types::nil; typedef chain<int, chain<float, chain<char, nil>>> t0; typedef chain_generator<chain, nil> my_gen; typedef my_gen::gen<int, float, char>::type t1; return 0; } //End Code ---------------------------------------------------- See the attached file: Compiler error: test.cpp: In instantiation of 'struct chain_generator<my_types::chain, my_types::nil>::gen<int, float, char>::inner<2u, void>': test.cpp:44:49: required from 'struct chain_generator<my_types::chain, my_types::nil>::gen<int, float, char>' test.cpp:58:39: required from here test.cpp:35:51: error: type/value mismatch at argument 1 in template parameter list for 'template<template<class, class> class Chain, class Nil> template<class T, class ... Args> struct chain_generator<Chain, Nil>::gen' test.cpp:35:51: error: expected a type, got '#'tree_vec' not supported by dump_expr#<expression error>' test.cpp:35:51: error: type/value mismatch at argument 2 in template parameter list for 'template<template<class, class> class Chain, class Nil> template<class T, class ... Args> struct chain_generator<Chain, Nil>::gen' test.cpp:35:51: error: expected a type, got '#'tree_vec' not supported by dump_expr#<expression error>'