Стандарт С++ запрещает объявления сторонних специализаций. (§14.5.3/8):
Декларации друзей не должны объявлять частичную специализацию. [Пример:
template<class T> class A { };
class X {
template <class T> friend class A<T*>; //error
};
- конец примера]
Другие вопросы, например. этот, получили ответы, которые ссылаются на этот запрет, но я хотел бы знать обоснование. Я не вижу его и не могу найти его с помощью моей любимой поисковой системы. я может найти, однако, что он возвращается к стандарту С++ 98, поэтому предположительно обоснование является довольно простым и понятным. Может кто-нибудь объяснить это мне?