1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4*67e74705SXin Li 5*67e74705SXin Li // PR4607 6*67e74705SXin Li template <class T> struct X {}; 7*67e74705SXin Li 8*67e74705SXin Li template <> struct X<char> 9*67e74705SXin Li { 10*67e74705SXin Li static char* g(); 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li template <class T> struct X2 {}; 14*67e74705SXin Li 15*67e74705SXin Li template <class U> 16*67e74705SXin Li struct X2<U*> { fX217*67e74705SXin Li static void f() { 18*67e74705SXin Li X<U>::g(); 19*67e74705SXin Li } 20*67e74705SXin Li }; 21*67e74705SXin Li a(char * a,char * b)22*67e74705SXin Livoid a(char *a, char *b) {X2<char*>::f();} 23*67e74705SXin Li 24*67e74705SXin Li namespace WonkyAccess { 25*67e74705SXin Li template<typename T> 26*67e74705SXin Li struct X { 27*67e74705SXin Li int m; 28*67e74705SXin Li }; 29*67e74705SXin Li 30*67e74705SXin Li template<typename U> 31*67e74705SXin Li class Y; 32*67e74705SXin Li 33*67e74705SXin Li template<typename U> 34*67e74705SXin Li struct Y<U*> : X<U> { }; 35*67e74705SXin Li 36*67e74705SXin Li template<> 37*67e74705SXin Li struct Y<float*> : X<float> { }; 38*67e74705SXin Li f(Y<int * > y,Y<float * > y2)39*67e74705SXin Li int f(Y<int*> y, Y<float*> y2) { 40*67e74705SXin Li return y.m + y2.m; 41*67e74705SXin Li } 42*67e74705SXin Li } 43*67e74705SXin Li 44*67e74705SXin Li // <rdar://problem/9169404> 45*67e74705SXin Li namespace rdar9169404 { 46*67e74705SXin Li template<typename T, T N> struct X { }; 47*67e74705SXin Li template<bool C> struct X<bool, C> { 48*67e74705SXin Li typedef int type; 49*67e74705SXin Li }; 50*67e74705SXin Li 51*67e74705SXin Li X<bool, -1>::type value; 52*67e74705SXin Li #if __cplusplus >= 201103L 53*67e74705SXin Li // expected-error@-2 {{non-type template argument evaluates to -1, which cannot be narrowed to type 'bool'}} 54*67e74705SXin Li #else 55*67e74705SXin Li // expected-no-diagnostics 56*67e74705SXin Li #endif 57*67e74705SXin Li } 58