Используйте ключевое слово inline
:
template <unsigned N>
unsigned get_const()
{
return N;
}
template <>
inline unsigned get_const<42>()
{
throw "meaning of life";
}
Ключевое слово указывает, что несколько определений должны быть одинаковыми и, следовательно, не являются ошибкой.(Это ортогонально static
, который сохраняет повторяющиеся определения в своих собственных единицах перевода.)
Обратите внимание, что это работает со всеми функциями, а не только с шаблонами или специализациями.