https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77811
Bug ID: 77811 Summary: [concepts] invalid redefinition error when declaring friend function Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ryan.burn at gmail dot com Target Milestone: --- The below code should be valid but gives this error when compiling with gcc (7.0.0 201609) prog.cc: In instantiation of 'struct B<int>': prog.cc:22:20: required from here prog.cc:16:14: error: redefinition of 'template<class S> int f(const S&)' friend int f(const S& s) { ///////////////////////////////////////////////////////////////////////// #include <type_traits> template<class T> struct A { template <class S> requires std::is_same<S, A>::value friend int f(const S& s) { return 0; } }; template <class T> struct B { template <class S> requires std::is_same<S, B>::value friend int f(const S& s) { return 1; } }; int main() { A<int> a; B<int> b; int x = f(a); int y = f(b); return 0; } /////////////////////////////////////////////////////////////////////////