Подтвердить что ты не робот

С++ шаблонная специализация функции: "незаконное использование аргументов явного шаблона"

Следующий код специализации шаблона:

template<typename T1, typename T2>
void spec1()
{

}

Тестовый случай 1:

template< typename T1> //compile error
void spec1<int>()
{

}

Пример 2:

template< typename T2> //compile error
void spec1<int>()
{

}

генерирует следующую ошибку компиляции:

ошибка C2768: 'spec1': незаконное использование аргументов явного шаблона

Кто-нибудь знает, почему?

4b9b3361

Ответ 1

Шаблоны функций не могут быть частично специализированными, только полностью, например:

template<>
void spec1<char, int>()
{

}

Почему шаблоны функций не могут быть частично специализированными, вы можете прочитать это.

Когда вы специализируетесь частично (возможно только для классов), вам нужно сделать это следующим образом:

template <typename T1>
class class1<T1, int>
{

};

поэтому вам нужно снова перечислить T1.

Как написаны ваши специализации, они будут двусмысленными для spec1<int, int>.