https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104141
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Fedor Chelnokov from comment #4) > A::f() does not depend on template parameter, so the rules here are somewhat > different than in T::f(). A possible answer: > https://stackoverflow.com/a/70783451/7325599 But clang is not rejecting it the following: class A{ static void f(); }; template <class T> concept t = requires{ A::f(); }; static_assert( !t<A> ); By saying A::f() is private even, it literally sets the concept to false and nothing else which is really really shocking.