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