https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77561
Bug ID: 77561
Summary: Unclear diagnostic for invalid declaration of partial
specialization as friend
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
Target Milestone: ---
template <typename T, typename U> class A { };
template <typename T>
class B {
template <typename U> friend class A<T, U>;
};
G++ says:
ps.cc:5:38: error: specialization of ‘template<class T, class U> class A’ must
appear at namespace scope
template <typename U> friend class A<T, U>;
^~~~~~~
The user is not trying to declare a specialization, they're trying to define a
friend. The error should tell them that is allowed, instead of telling them
they're doing it in the wrong place.
Clang says:
ps.cc:5:32: error: partial specialization cannot be declared as a friend
template <typename U> friend class A<T, U>;
^ ~~~~~~
EDG says:
"ps.cc", line 5: error: a friend declaration may not declare a partial
specialization
template <typename U> friend class A<T, U>;
^