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