// RUN: %clang_cc1 --std=c++20 %s -emit-llvm -o - -triple x86_64-linux | FileCheck %s namespace std { struct strong_ordering { int n; constexpr operator int() const { return n; } static const strong_ordering equal, greater, less; }; constexpr inline strong_ordering strong_ordering::equal = {0}; constexpr inline strong_ordering strong_ordering::greater = {1}; constexpr inline strong_ordering strong_ordering::less = {-1}; } // namespace std struct Space { int i, j; std::strong_ordering operator<=>(Space const &other) const; bool operator==(Space const &other) const; }; // Make sure these cause emission std::strong_ordering Space::operator<=>(Space const &other) const = default; // CHECK-LABEL: define{{.*}} @_ZNK5SpacessERKS_ bool Space::operator==(Space const &) const = default; // CHECK-LABEL: define{{.*}} @_ZNK5SpaceeqERKS_ struct Water { int i, j; std::strong_ordering operator<=>(Water const &other) const; bool operator==(Water const &other) const; }; // Make sure these do not cause emission inline std::strong_ordering Water::operator<=>(Water const &other) const = default; // CHECK-NOT: define{{.*}} @_ZNK5WaterssERKS_ inline bool Water::operator==(Water const &) const = default; // CHECK-NOT: define{{.*}} @_ZNK5WatereqERKS_