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

Reply via email to