我知道标准禁止在非命名空间范围内进行显式特化。例如,这个:
template <class A>
class Outer {
template <class B>
class Inner {};
template <>
class Inner<A> {};
};
会出现Explicit specialization in non-namespace scope
错误。我理解错误是什么以及如何使用额外的伪参数来避免它(也可以通过将Inner
类放在外面并为其添加额外参数来避免它,我想避免使用某些较旧的编译器部分模板专业化有问题。)
然而,似乎这样做实际上给编译器带来了更多的工作。我的问题是 - 为什么非命名空间范围禁止中的显式特化?强加于此的动机是什么?
据我所知,关于此主题还有更多问题(C++: Nested template classes error "explicit specialization in non-namespace scope",Explicit specialization in non-namespace scope,C++: error "explicit specialization in non-namespace scope"),但我相信我的不重复 ,因为我不问如何解决问题,就像那些问题一样。