2016-07-25 5 views
1

В этом примере кода генерируется expected a class template, got std::pair <_T1, _T2>. Я пробовал использовать struct Struct <std::pair> {};, но тогда параметры T и M стали неулучшаемыми. Как этого избежать?Ошибка шаблона шаблона шаблона: «ожидается шаблон класса»

template <template <class...> class> 
    struct Struct {}; 

    template <class T, class M> 
    struct Struct <std::pair <T, M>> {}; 
+1

'станд :: pair' это шаблон класса,' станд :: пара <_T1, _T2> 'нет. Вы можете изменить объявление основного шаблона на 'template struct Struct {};'. – songyuanyao

ответ

2

В зависимости от того, что вы хотите

template <template <class...> class> 
struct Struct {}; 

template <> 
struct Struct <std::pair> 
{ 
    // Specialization 
}; 

или

template <typename> struct Struct {}; 

template <typename First, typename Second> 
struct Struct <std::pair<First, Second>> 
{ 
    // Specialization 
}; 
1

Это не действительная специализация для вашего шаблона.

Причина в том, что std::pair<T, M> - полная специализация шаблона класса std::pair и, следовательно, класс. Ваш шаблон ожидает параметр шаблона класса, который именно то, что вам сообщает компилятор.

Смежные вопросы