https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106313
Bug ID: 106313 Summary: GCC incorrectly compiles code involving concept Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jlame646 at gmail dot com Target Milestone: --- The following program is compiled in gcc 12.1 even though it should not as `obj` is not a constant expression. A working demo can be seen here:https://godbolt.org/z/aqoMGazfd ``` template<bool op> class Person { const bool own_pet; public: Person() : own_pet(op) {} consteval bool OwnPet() const { return own_pet; } consteval bool OwnPetC() const { return true; } void PatPet() const {} }; template<typename T> concept MustOwnPet = requires(T obj) { requires obj.OwnPet(); }; void pat(const MustOwnPet auto& p) { p.PatPet(); } template<typename T> concept MustOwnPetC = requires(T obj) { requires obj.OwnPetC(); }; void pat_c(const MustOwnPetC auto& p) { p.PatPet(); } int main() { pat_c(Person<true>()); return 0; } ```