| 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 | b1d38e3 | 2010-06-25 16:25:09 +0000 | [diff] [blame] | 18 | template <typename T, int y> |
| Argyrios Kyrtzidis | 69da4a8 | 2010-06-22 09:55:07 +0000 | [diff] [blame] | 19 | T templ_f(T x) { |
| Argyrios Kyrtzidis | 0b0369a | 2010-06-28 09:31:34 +0000 | [diff] [blame^] | 20 | int z = templ_f<int, 5>(3); |
| Argyrios Kyrtzidis | b1d38e3 | 2010-06-25 16:25:09 +0000 | [diff] [blame] | 21 | return x+y; |
| Argyrios Kyrtzidis | 69da4a8 | 2010-06-22 09:55:07 +0000 | [diff] [blame] | 22 | } |
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 23 | |
| Argyrios Kyrtzidis | 58e01ad | 2010-06-25 09:03:34 +0000 | [diff] [blame] | 24 | void govl(int); |
| 25 | void govl(char); |
| 26 | |
| 27 | template <typename T> |
| 28 | struct Unresolv { |
| 29 | void f() { |
| 30 | govl(T()); |
| 31 | } |
| 32 | }; |
| 33 | |
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 34 | template <typename T> |
| 35 | struct Dep { |
| 36 | typedef typename T::type Ty; |
| 37 | void f() { |
| 38 | Ty x = Ty(); |
| 39 | T::my_f(); |
| 40 | int y = T::template my_templf<int>(0); |
| Argyrios Kyrtzidis | b8d3c63 | 2010-06-25 09:03:26 +0000 | [diff] [blame] | 41 | ovl(y); |
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 42 | } |
| Argyrios Kyrtzidis | b8d3c63 | 2010-06-25 09:03:26 +0000 | [diff] [blame] | 43 | |
| 44 | void ovl(int); |
| 45 | void ovl(float); |
| Argyrios Kyrtzidis | bfcacee | 2010-06-24 08:57:31 +0000 | [diff] [blame] | 46 | }; |
| 47 | |
| 48 | template<typename T, typename A1> |
| 49 | inline T make_a(const A1& a1) { |
| 50 | return T(a1); |
| 51 | } |