https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108282
Bug ID: 108282 Summary: Disabled template method using requires-clause still viable through requires-expression Product: gcc Version: 12.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: turningtides at outlook dot de Target Milestone: --- Created attachment 54185 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54185&action=edit source code for gcc 12.2 $ gcc bug.cpp -std=c++20 Log: bug.cpp: In function ‘int main()’: bug.cpp:13:33: error: static assertion failed 13 | static_assert( TEST <B <C>> == false ); | ~~~~~~~~~~~~~^~~~~~~~ bug.cpp:13:33: note: the comparison reduces to ‘(1 == 0)’ bug.cpp:15:14: error: no matching function for call to ‘B<C>::TT()’ 15 | B <C>::TT(); // fails to compile! | ~~~~~~~~~^~ bug.cpp:7:24: note: candidate: ‘static void B<AT>::TT() requires TEST<AT> [with AT = C]’ 7 | static inline void TT() noexcept requires ( TEST <AT> ); | ^~ bug.cpp:7:24: note: constraints not satisfied bug.cpp: In instantiation of ‘static void B<AT>::TT() requires TEST<AT> [with AT = C]’: bug.cpp:15:14: required from here bug.cpp:2:9: required for the satisfaction of ‘TEST<AT>’ [with AT = C] bug.cpp:2:16: in requirements [with T = C] bug.cpp:2:30: note: the required expression ‘T::TT’ is invalid 2 | concept TEST = requires { T::TT; }; | ^~ cc1plus: note: set ‘-fconcepts-diagnostics-depth=’ to at least 2 for more detail