https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101888
Bug ID: 101888
Summary: constexpr default comparison member function
disregards the base class
Product: gcc
Version: 11.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: myosotis at mail dot ustc.edu.cn
Target Milestone: ---
This issue only occurs when the default operator== in the derived class is a
constexpr member function (non-constexpr or friend operator== won't trigger
this issue). Whether the operator== function in the base class is constexpr
member or not does not matter. I tested on gcc 11.1 and 11.2, and this issue
persists whatever the optimization level is. Repro:
struct S
{
int s = 0;
S(int s) : s(s) {}
bool operator==(const S&) const = default;
};
struct T : S
{
T(int s) : S(s) {}
constexpr bool operator==(const T&) const = default;
};
int main() { return T(0) == T(1); } // Expected 0, but returns 1