https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96830
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: template<typename T> concept C = requires { typename T::value_type; }; template<typename Container> requires C<Container> class Foo { public: void func(); }; template<typename Container> void Foo<Container>::func() {} EDG compiles it without error too. Clang says: 96830.C:10:1: error: requires clause differs in template redeclaration template<typename Container> ^ 96830.C:4:14: note: previous template declaration is here requires C<Container> ^ 1 error generated.