1 // RUN: %clang_cc1 -std=c++2a -verify %s
3 template<int> struct X
{};
5 X
<1> operator<<(X
<0>, X
<0>);
6 X
<2> operator<=>(X
<0>, X
<1>);
7 X
<2> operator<=>(X
<1>, X
<0>);
8 X
<3> operator<(X
<0>, X
<2>);
9 X
<3> operator<(X
<2>, X
<0>);
11 void f(X
<0> x0
, X
<1> x1
) {
12 X
<2> a
= x0
<=> x0
<< x0
;
13 X
<2> b
= x0
<< x0
<=> x0
; // expected-warning {{overloaded operator << has higher precedence than comparison operator}} expected-note 2{{}}
14 X
<3> c
= x0
< x0
<=> x1
;
15 X
<3> d
= x1
<=> x0
< x0
;
16 X
<3> e
= x0
< x0
<=> x0
<< x0
;
17 X
<3> f
= x0
<< x0
<=> x0
< x0
; // expected-warning {{overloaded operator << has higher precedence than comparison operator}} expected-note 2{{}}
21 [[nodiscard
]] friend bool operator==(const PR41991
&, const PR41991
&) = default;
22 [[nodiscard
]] friend bool operator!=(const PR41991
&, const PR41991
&) = delete;
23 [[nodiscard
]] friend bool operator<(const PR41991
&, const PR41991
&); // expected-error {{an attribute list cannot appear here}}