197c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace bullet2 {
46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// For non-member candidates, if no operand has a class type, only those
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// non-member functions that have a matching enumeration parameter are
76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// candidates.
86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct B { template<typename T> B(T); };
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint operator~(B);
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename T> int operator%(B, T);
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesenum class E { e };
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename T> int f(T t) { return ~t; } // expected-error {{invalid argument type}}
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<typename T, typename U> int f(T t, U u) { return t % u; } // expected-error {{invalid operands to}}
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint b1 = ~E::e; // expected-error {{invalid argument type}}
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint b2 = f(E::e); // expected-note {{in instantiation of}}
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint b3 = f(0, E::e);
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint b4 = f(E::e, 0); // expected-note {{in instantiation of}}
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace bullet3 {
2597c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
2697c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman// This is specifically testing the bullet:
2797c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman// "do not have the same parameter-type-list as any non-template
2897c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman// non-member candidate."
2997c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman// The rest is sort of hard to test separately.
3097c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
3197c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanenum E1 { one };
3297c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanenum E2 { two };
3397c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
3497c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanstruct A;
3597c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
3697c6739a1e74a3131261081054ff4a75e4e3b64cEli FriedmanA operator >= (E1, E1);
3797c6739a1e74a3131261081054ff4a75e4e3b64cEli FriedmanA operator >= (E1, const E2);
3897c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
3997c6739a1e74a3131261081054ff4a75e4e3b64cEli FriedmanE1 a;
4097c6739a1e74a3131261081054ff4a75e4e3b64cEli FriedmanE2 b;
4197c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
4297c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanextern A test1;
4397c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanextern decltype(a >= a) test1;
4497c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanextern decltype(a >= b) test1;
4597c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
4697c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmantemplate <typename T> A operator <= (E1, T);
4797c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanextern bool test2;
4897c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanextern decltype(a <= a) test2;
4997c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedman
5097c6739a1e74a3131261081054ff4a75e4e3b64cEli Friedmanextern A test3;
516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern decltype(a <= b) test3;
526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}
54