C++ 標準では、部分的な特殊化のフレンド宣言を禁止しています。(§14.5.3/8):
フレンド宣言は、部分的な特殊化を宣言してはなりません。[例:
template<class T> class A { };
class X {
template <class T> friend class A<T*>; //error
};
--終わりの例]
この質問など、他の質問には、この禁止事項を発動する回答が寄せられていますが、その根拠を知りたいです。見ないし、お気に入りの検索エンジンでも見つからない。しかし、それは C++98 標準にさかのぼることができるので、おそらくその理論的根拠は非常に基本的で明確です。誰かが私にそれを説明できますか?