blob: b562f471f862b9073ce49b1330c808d17b55ab5f [file] [log] [blame]
Argyrios Kyrtzidis106caf922010-06-19 19:28:53 +00001// Header for PCH test cxx-templates.cpp
2
Argyrios Kyrtzidis818c5db2010-06-23 13:48:30 +00003template <typename T1, typename T2>
Argyrios Kyrtzidis106caf922010-06-19 19:28:53 +00004struct S {
Argyrios Kyrtzidis818c5db2010-06-23 13:48:30 +00005 static void templ();
6};
7
8template <typename T>
9struct S<int, T> {
10 static void partial();
11};
12
13template <>
14struct S<int, float> {
15 static void explicit_special();
Argyrios Kyrtzidis106caf922010-06-19 19:28:53 +000016};
Argyrios Kyrtzidis69da4a82010-06-22 09:55:07 +000017
Argyrios Kyrtzidisddf5f212010-06-28 09:31:42 +000018template <int x>
19int tmpl_f2() { return x; }
20
Argyrios Kyrtzidisb1d38e32010-06-25 16:25:09 +000021template <typename T, int y>
Argyrios Kyrtzidis69da4a82010-06-22 09:55:07 +000022T templ_f(T x) {
Argyrios Kyrtzidis0b0369a2010-06-28 09:31:34 +000023 int z = templ_f<int, 5>(3);
Argyrios Kyrtzidisddf5f212010-06-28 09:31:42 +000024 z = tmpl_f2<y+2>();
Argyrios Kyrtzidis4a57bd02010-06-30 08:49:25 +000025 T data[y];
Argyrios Kyrtzidisb1d38e32010-06-25 16:25:09 +000026 return x+y;
Argyrios Kyrtzidis69da4a82010-06-22 09:55:07 +000027}
Argyrios Kyrtzidisbfcacee2010-06-24 08:57:31 +000028
Argyrios Kyrtzidis58e01ad2010-06-25 09:03:34 +000029void govl(int);
30void govl(char);
31
32template <typename T>
33struct Unresolv {
34 void f() {
35 govl(T());
36 }
37};
38
Argyrios Kyrtzidisbfcacee2010-06-24 08:57:31 +000039template <typename T>
40struct Dep {
41 typedef typename T::type Ty;
42 void f() {
43 Ty x = Ty();
44 T::my_f();
45 int y = T::template my_templf<int>(0);
Argyrios Kyrtzidisb8d3c632010-06-25 09:03:26 +000046 ovl(y);
Argyrios Kyrtzidisbfcacee2010-06-24 08:57:31 +000047 }
Argyrios Kyrtzidisb8d3c632010-06-25 09:03:26 +000048
49 void ovl(int);
50 void ovl(float);
Argyrios Kyrtzidisbfcacee2010-06-24 08:57:31 +000051};
52
53template<typename T, typename A1>
54inline T make_a(const A1& a1) {
Argyrios Kyrtzidiscd444d1a2010-06-28 09:31:56 +000055 T::depend_declref();
Argyrios Kyrtzidisbfcacee2010-06-24 08:57:31 +000056 return T(a1);
57}
Argyrios Kyrtzidisbd8ac8c2010-06-30 08:49:30 +000058
59template <class T> class UseBase {
60 void foo();
61 typedef int bar;
62};
63
64template <class T> class UseA : public UseBase<T> {
65 using UseBase<T>::foo;
66 using typename UseBase<T>::bar;
67};