1 // RUN: %clang_cc1 -std=c++2a -verify %s
4 int operator<=>(const Good
&) const;
6 bool operator<(const Good
&) const = default;
7 bool operator>(const Good
&) const = default;
8 friend bool operator<=(const Good
&, const Good
&) = default;
9 friend bool operator>=(const Good
&, const Good
&) = default;
14 bool &operator<(const Bad
&) const = default; // expected-error {{return type for defaulted relational comparison operator must be 'bool', not 'bool &'}}
15 const bool operator>(const Bad
&) const = default; // expected-error {{return type for defaulted relational comparison operator must be 'bool', not 'const bool'}}
16 friend Bool
operator<=(const Bad
&, const Bad
&) = default; // expected-error {{return type for defaulted relational comparison operator must be 'bool', not 'Bool'}}
17 friend int operator>=(const Bad
&, const Bad
&) = default; // expected-error {{return type for defaulted relational comparison operator must be 'bool', not 'int'}}
20 template<typename T
> struct Ugly
{
21 T
operator<(const Ugly
&) const = default; // expected-error {{return type}}
22 T
operator>(const Ugly
&) const = default; // expected-error {{return type}}
23 friend T
operator<=(const Ugly
&, const Ugly
&) = default; // expected-error {{return type}}
24 friend T
operator>=(const Ugly
&, const Ugly
&) = default; // expected-error {{return type}}
26 template struct Ugly
<bool>;
27 template struct Ugly
<int>; // expected-note {{in instantiation of}}