| Argyrios Kyrtzidis | 106caf92 | 2010-06-19 19:28:53 +0000 | [diff] [blame] | 1 | // Header for PCH test cxx-templates.cpp | 
|  | 2 |  | 
| Argyrios Kyrtzidis | 818c5db | 2010-06-23 13:48:30 +0000 | [diff] [blame] | 3 | template <typename T1, typename T2> | 
| Argyrios Kyrtzidis | 106caf92 | 2010-06-19 19:28:53 +0000 | [diff] [blame] | 4 | struct S { | 
| Argyrios Kyrtzidis | 818c5db | 2010-06-23 13:48:30 +0000 | [diff] [blame] | 5 | static void templ(); | 
|  | 6 | }; | 
|  | 7 |  | 
|  | 8 | template <typename T> | 
|  | 9 | struct S<int, T> { | 
|  | 10 | static void partial(); | 
|  | 11 | }; | 
|  | 12 |  | 
|  | 13 | template <> | 
|  | 14 | struct S<int, float> { | 
|  | 15 | static void explicit_special(); | 
| Argyrios Kyrtzidis | 106caf92 | 2010-06-19 19:28:53 +0000 | [diff] [blame] | 16 | }; | 
| Argyrios Kyrtzidis | 69da4a8 | 2010-06-22 09:55:07 +0000 | [diff] [blame] | 17 |  | 
| Argyrios Kyrtzidis | ddf5f21 | 2010-06-28 09:31:42 +0000 | [diff] [blame] | 18 | template <int x> | 
|  | 19 | int tmpl_f2() { return x; } | 
|  | 20 |  | 
| Argyrios Kyrtzidis | b1d38e3 | 2010-06-25 16:25:09 +0000 | [diff] [blame] | 21 | template <typename T, int y> | 
| Argyrios Kyrtzidis | 69da4a8 | 2010-06-22 09:55:07 +0000 | [diff] [blame] | 22 | T templ_f(T x) { | 
| Argyrios Kyrtzidis | 0b0369a | 2010-06-28 09:31:34 +0000 | [diff] [blame] | 23 | int z = templ_f<int, 5>(3); | 
| Argyrios Kyrtzidis | ddf5f21 | 2010-06-28 09:31:42 +0000 | [diff] [blame] | 24 | z = tmpl_f2<y+2>(); | 
| Argyrios Kyrtzidis | 4a57bd0 | 2010-06-30 08:49:25 +0000 | [diff] [blame] | 25 | T data[y]; | 
| Argyrios Kyrtzidis | b1d38e3 | 2010-06-25 16:25:09 +0000 | [diff] [blame] | 26 | return x+y; | 
| Argyrios Kyrtzidis | 69da4a8 | 2010-06-22 09:55:07 +0000 | [diff] [blame] | 27 | } | 
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 28 |  | 
| Argyrios Kyrtzidis | 58e01ad | 2010-06-25 09:03:34 +0000 | [diff] [blame] | 29 | void govl(int); | 
|  | 30 | void govl(char); | 
|  | 31 |  | 
|  | 32 | template <typename T> | 
|  | 33 | struct Unresolv { | 
|  | 34 | void f() { | 
|  | 35 | govl(T()); | 
|  | 36 | } | 
|  | 37 | }; | 
|  | 38 |  | 
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 39 | template <typename T> | 
|  | 40 | struct 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 Kyrtzidis | b8d3c63 | 2010-06-25 09:03:26 +0000 | [diff] [blame] | 46 | ovl(y); | 
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 47 | } | 
| Argyrios Kyrtzidis | b8d3c63 | 2010-06-25 09:03:26 +0000 | [diff] [blame] | 48 |  | 
|  | 49 | void ovl(int); | 
|  | 50 | void ovl(float); | 
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 51 | }; | 
|  | 52 |  | 
|  | 53 | template<typename T, typename A1> | 
|  | 54 | inline T make_a(const A1& a1) { | 
| Argyrios Kyrtzidis | cd444d1a | 2010-06-28 09:31:56 +0000 | [diff] [blame] | 55 | T::depend_declref(); | 
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 56 | return T(a1); | 
|  | 57 | } | 
| Argyrios Kyrtzidis | bd8ac8c | 2010-06-30 08:49:30 +0000 | [diff] [blame^] | 58 |  | 
|  | 59 | template <class T> class UseBase { | 
|  | 60 | void foo(); | 
|  | 61 | typedef int bar; | 
|  | 62 | }; | 
|  | 63 |  | 
|  | 64 | template <class T> class UseA : public UseBase<T> { | 
|  | 65 | using UseBase<T>::foo; | 
|  | 66 | using typename UseBase<T>::bar; | 
|  | 67 | }; |