1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4 
5 template<typename T, int N>
6 struct X0 {
f0X07   const char *f0(bool Cond) {
8     return Cond? "honk" : N;
9 #if __cplusplus >= 201103L
10 // expected-error@-2 {{incompatible operand types ('const char *' and 'int')}}
11 #else
12 // expected-no-diagnostics
13 #endif
14   }
15 
f1X016   const char *f1(bool Cond) {
17     return Cond? N : "honk";
18 #if __cplusplus >= 201103L
19 // expected-error@-2 {{incompatible operand types ('int' and 'const char *')}}
20 #endif
21   }
22 
f2X023   bool f2(const char *str) {
24     return str == N;
25 #if __cplusplus >= 201103L
26 // expected-error@-2 {{comparison between pointer and integer ('const char *' and 'int')}}
27 #endif
28   }
29 };
30 
31 // PR4996
f0()32 template<unsigned I> int f0() {
33   return __builtin_choose_expr(I, 0, 1);
34 }
35 
36 // PR5041
37 struct A { };
38 
f(T * t)39 template <typename T> void f(T *t)
40 {
41   (void)static_cast<void*>(static_cast<A*>(t));
42 }
43