https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110497
Bug ID: 110497 Summary: Wrong error on non-static data member referenced in concept definition Product: gcc Version: 13.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: fchelnokov at gmail dot com Target Milestone: --- This program struct B { const bool b = true; }; template <typename T> concept C = T::b; static_assert( !C<B> ); is accepted in Clang. And I think correctly accepted because of substitution failure per https://eel.is/c++draft/temp.constr.constr#temp.constr.op-5 > [...] Furthermore, if substitution to determine whether an atomic constraint > is satisfied ([temp.constr.atomic]) encounters a substitution failure, the > constraint is not satisfied, regardless of the presence of a negation > operator. But GCC emits a weird error (at least the error text must be adjusted): error: '*(B*)(void)0' is not a constant expression Online demo: https://gcc.godbolt.org/z/xKf13cb6v