https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119259
Bug ID: 119259 Summary: compilation error: *constexpr* operator==(const T&) const = default` forces compilation of std::vector<not std::equality_comparable>'s operator== function Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: awia00 at gmail dot com Target Milestone: --- Created attachment 60729 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60729&action=edit compiler output ``` // https://godbolt.org/z/9741Knnjc #include <vector> template<typename T> struct default_equatable { T val; // removing constexpr solves the problem constexpr auto operator==(const default_equatable&)const noexcept -> bool =default; }; struct not_equatable { int v; auto operator==(const not_equatable&) const -> bool = delete; }; int main() { auto compiles = default_equatable<not_equatable>{41}; auto fails_compilation = default_equatable<std::vector<not_equatable>>{.val=std::vector<not_equatable>{{.v=42}}}; } ```