2010-06-20 03:28:53 +08:00
|
|
|
// Header for PCH test cxx-templates.cpp
|
|
|
|
|
2010-06-23 21:48:30 +08:00
|
|
|
template <typename T1, typename T2>
|
2010-06-20 03:28:53 +08:00
|
|
|
struct S {
|
2010-06-23 21:48:30 +08:00
|
|
|
static void templ();
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
struct S<int, T> {
|
|
|
|
static void partial();
|
|
|
|
};
|
|
|
|
|
|
|
|
template <>
|
|
|
|
struct S<int, float> {
|
|
|
|
static void explicit_special();
|
2010-06-20 03:28:53 +08:00
|
|
|
};
|
2010-06-22 17:55:07 +08:00
|
|
|
|
2010-06-28 17:31:42 +08:00
|
|
|
template <int x>
|
|
|
|
int tmpl_f2() { return x; }
|
|
|
|
|
2010-06-26 00:25:09 +08:00
|
|
|
template <typename T, int y>
|
2010-06-22 17:55:07 +08:00
|
|
|
T templ_f(T x) {
|
2010-06-28 17:31:34 +08:00
|
|
|
int z = templ_f<int, 5>(3);
|
2010-06-28 17:31:42 +08:00
|
|
|
z = tmpl_f2<y+2>();
|
2010-06-26 00:25:09 +08:00
|
|
|
return x+y;
|
2010-06-22 17:55:07 +08:00
|
|
|
}
|
2010-06-24 16:57:31 +08:00
|
|
|
|
2010-06-25 17:03:34 +08:00
|
|
|
void govl(int);
|
|
|
|
void govl(char);
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
struct Unresolv {
|
|
|
|
void f() {
|
|
|
|
govl(T());
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2010-06-24 16:57:31 +08:00
|
|
|
template <typename T>
|
|
|
|
struct Dep {
|
|
|
|
typedef typename T::type Ty;
|
|
|
|
void f() {
|
|
|
|
Ty x = Ty();
|
|
|
|
T::my_f();
|
|
|
|
int y = T::template my_templf<int>(0);
|
2010-06-25 17:03:26 +08:00
|
|
|
ovl(y);
|
2010-06-24 16:57:31 +08:00
|
|
|
}
|
2010-06-25 17:03:26 +08:00
|
|
|
|
|
|
|
void ovl(int);
|
|
|
|
void ovl(float);
|
2010-06-24 16:57:31 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
template<typename T, typename A1>
|
|
|
|
inline T make_a(const A1& a1) {
|
|
|
|
return T(a1);
|
|
|
|
}
|