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}}};
}
```