为什么禁止在非命名空间范围内进行显式特化?

时间:2014-08-27 17:04:11

标签: c++ templates

我知道标准禁止在非命名空间范围内进行显式特化。例如,这个:

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 scopeC++: error "explicit specialization in non-namespace scope"),但我相信我的不重复 ,因为我不问如何解决问题,就像那些问题一样。

0 个答案:

没有答案