https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116428

            Bug ID: 116428
           Summary: Redeclaration of explicitly defaulted comparison
                    operator makes it undefined
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

This program
```
struct A {
    friend constexpr bool operator ==(const A &, const A &) noexcept = default;
};

constexpr bool operator ==(const A &, const A &) noexcept;
static_assert( A{} == A{} );
```
looks valid and it is accepted by EDG compiler. But GCC rejects it with the
error

> inline function 'constexpr bool operator==(const A&, const A&)' used but 
> never defined

Clang unfortunately has a similar issue.

Online demo: https://gcc.godbolt.org/z/f5saeGrGM

Related discussion: https://stackoverflow.com/q/78889523/7325599

Reply via email to