Reputation: 1322
Can someone give me some insight into why this code doesn't work:
template <template <class... Ts> class Derived>
struct Base
{
Base(Derived<Ts...>* d_param) : d(d_param) {}
Derived<Ts...>* d;
};
I'm using GCC 4.8.1.
Upvotes: 1
Views: 69
Reputation: 56921
The problem is that a template template parameter may have identifiers for the template's parameters, but they are unusable. Depending on your envisioned use, you need either to pass in the complete type or a template and its parameters separately. Examples for the first option:
template< class Derived >
struct Base
{
Base(Derived* d_param) : d(d_param) {}
Derived* d;
};
used as
Base< std::map< int, double > > x;
or if you need to have separate parameters your second option is:
template< template<class...> class Derived, class... Ts >
struct Base
{
Base(Derived<Ts...>* d_param) : d(d_param) {}
Derived<Ts...>* d;
};
used as
Base< std::map, int, double > x;
Upvotes: 3