kanielc
kanielc

Reputation: 1322

Class with pointers to variadic template template parameters

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

Answers (1)

Daniel Frey
Daniel Frey

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

Related Questions