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 template <typename T> struct S { SS6*67e74705SXin Li S() { } 7*67e74705SXin Li S(T t); 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li template struct S<int>; 11*67e74705SXin Li f()12*67e74705SXin Livoid f() { 13*67e74705SXin Li S<int> s1; 14*67e74705SXin Li S<int> s2(10); 15*67e74705SXin Li } 16*67e74705SXin Li 17*67e74705SXin Li namespace PR7184 { 18*67e74705SXin Li template<typename T> f()19*67e74705SXin Li void f() { 20*67e74705SXin Li typedef T type; 21*67e74705SXin Li void g(int array[sizeof(type)]); 22*67e74705SXin Li } 23*67e74705SXin Li 24*67e74705SXin Li template void f<int>(); 25*67e74705SXin Li } 26*67e74705SXin Li 27*67e74705SXin Li namespace UsedAttr { 28*67e74705SXin Li template<typename T> foo()29*67e74705SXin Li void __attribute__((used)) foo() { 30*67e74705SXin Li T *x = 1; // expected-error{{cannot initialize a variable of type 'int *' with an rvalue of type 'int'}} 31*67e74705SXin Li } 32*67e74705SXin Li bar()33*67e74705SXin Li void bar() { 34*67e74705SXin Li foo<int>(); // expected-note{{instantiation of}} 35*67e74705SXin Li } 36*67e74705SXin Li } 37*67e74705SXin Li 38*67e74705SXin Li namespace PR9654 { 39*67e74705SXin Li typedef void ftype(int); 40*67e74705SXin Li 41*67e74705SXin Li template<typename T> 42*67e74705SXin Li ftype f; 43*67e74705SXin Li g()44*67e74705SXin Li void g() { 45*67e74705SXin Li f<int>(0); 46*67e74705SXin Li } 47*67e74705SXin Li } 48*67e74705SXin Li 49*67e74705SXin Li namespace AliasTagDef { 50*67e74705SXin Li template<typename T> f()51*67e74705SXin Li T f() { 52*67e74705SXin Li using S = struct { 53*67e74705SXin Li #if __cplusplus <= 199711L 54*67e74705SXin Li // expected-warning@-2 {{alias declarations are a C++11 extension}} 55*67e74705SXin Li #endif 56*67e74705SXin Li T g() { 57*67e74705SXin Li return T(); 58*67e74705SXin Li } 59*67e74705SXin Li }; 60*67e74705SXin Li return S().g(); 61*67e74705SXin Li } 62*67e74705SXin Li 63*67e74705SXin Li int n = f<int>(); 64*67e74705SXin Li } 65*67e74705SXin Li 66*67e74705SXin Li namespace PR10273 { 67*67e74705SXin Li template<typename T> void (f)(T t) {} 68*67e74705SXin Li g()69*67e74705SXin Li void g() { 70*67e74705SXin Li (f)(17); 71*67e74705SXin Li } 72*67e74705SXin Li } 73*67e74705SXin Li 74*67e74705SXin Li namespace rdar15464547 { 75*67e74705SXin Li class A { 76*67e74705SXin Li A(); 77*67e74705SXin Li }; 78*67e74705SXin Li 79*67e74705SXin Li template <typename R> class B { 80*67e74705SXin Li public: 81*67e74705SXin Li static void meth1(); 82*67e74705SXin Li static void meth2(); 83*67e74705SXin Li }; 84*67e74705SXin Li A()85*67e74705SXin Li A::A() { 86*67e74705SXin Li extern int compile_time_assert_failed; 87*67e74705SXin Li B<int>::meth2(); 88*67e74705SXin Li } 89*67e74705SXin Li meth1()90*67e74705SXin Li template <typename R> void B<R>::meth1() { 91*67e74705SXin Li extern int compile_time_assert_failed; 92*67e74705SXin Li } 93*67e74705SXin Li meth2()94*67e74705SXin Li template <typename R> void B<R>::meth2() { 95*67e74705SXin Li extern int compile_time_assert_failed; 96*67e74705SXin Li } 97*67e74705SXin Li } 98