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