C++ стандарт гласит следующее:Почему явная специализация члена не допускается без специализации класса?
В явной декларации специализации для члена шаблона класса или шаблона члена, появляется в области видимости пространства имен, шаблон элемента и некоторые из его шаблонов классов вшиты может оставаться неспециализированный, за исключением того, что декларация не должна явно специализировать шаблон члена класса, если его шаблоны классов не являются явно специализированными, а также. (14.7.3/16 начиная с C++ 11 и 14.7.3/18 в старые стандарты)
Это означает, что следующее не представляется возможным:
template<typename T>
class foo {
template<typename U>
void bar();
};
template<typename T>
template<>
void foo<T>::bar<some_type>(){
}
Там уже несколько вопросы люди, имеющие проблемы, связанные с этим, на которые ответили более или менее «стандарт говорит так». Я не понимаю, почему это ограничение существует.
Правильное предположение: если существует специализированность для 'T = int' и' U', а также специализация для 'U = int',' T' unspecialized, которые следует принимать, если 'T = int 'и' U = int'? – JohnB
О, теперь я чувствую себя глупо ... – Soliter11
Должен ли я ответить на вопрос или вы хотите? – Soliter11