C++ 标准禁止部分特化的友元声明。(§14.5.3/8):
友元声明不得声明部分特化。[例子:
template<class T> class A { };
class X {
template <class T> friend class A<T*>; //error
};
--结束示例]
其他问题,例如这个问题,已经收到了援引这一禁令的答案,但我想知道原因。我没有看到它,也无法用我最喜欢的搜索引擎找到它。然而,我可以发现它可以追溯到 C++98 标准,所以大概原理是非常基本和明确的。有人可以向我解释吗?