1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
5 // For non-member candidates, if no operand has a class type, only those
6 // non-member functions that have a matching enumeration parameter are
9 struct B
{ template<typename T
> B(T
); };
11 template<typename T
> int operator%(B
, T
);
14 template<typename T
> int f(T t
) { return ~t
; } // expected-error {{invalid argument type}}
15 template<typename T
, typename U
> int f(T t
, U u
) { return t
% u
; } // expected-error {{invalid operands to}}
17 int b1
= ~E::e
; // expected-error {{invalid argument type}}
18 int b2
= f(E::e
); // expected-note {{in instantiation of}}
20 int b4
= f(E::e
, 0); // expected-note {{in instantiation of}}
26 // This is specifically testing the bullet:
27 // "do not have the same parameter-type-list as any non-template
28 // non-member candidate."
29 // The rest is sort of hard to test separately.
36 A
operator >= (E1
, E1
);
37 A
operator >= (E1
, const E2
);
43 extern decltype(a
>= a
) test1
;
44 extern decltype(a
>= b
) test1
;
46 template <typename T
> A
operator <= (E1
, T
);
48 extern decltype(a
<= a
) test2
;
51 extern decltype(a
<= b
) test3
;