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

            Bug ID: 98842
           Summary: optional's spaceship operations generates wrong code
                    when operator== is not present
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nunoplopes at sapo dot pt
  Target Milestone: ---

struct expr {
  std::strong_ordering operator<=>(const expr &rhs) const;
  //bool operator==(const expr &rhs) const;
};

int f() {
  return std::is_eq(std::optional<expr>() <=> std::optional<expr>());
  //return std::optional<expr>() == std::optional<expr>();
}


Function f() is compiled to 0 like that. But if you uncomment the
expr::operator== line, it returns 1.

https://gcc.godbolt.org/z/fv85eP

Reply via email to