cxx-templates.h revision bd65bb511c26549c96b829c1282e4c877588564a
190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis// Header for PCH test cxx-templates.cpp
290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis
3dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidistemplate <typename T1, typename T2>
490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidisstruct S {
5dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis  static void templ();
6dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis};
7dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis
8dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidistemplate <typename T>
9dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidisstruct S<int, T> {
10dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis    static void partial();
11dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis};
12dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis
13dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidistemplate <>
14dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidisstruct S<int, float> {
15dd41c14bfd7686b556de2acf6952e21a4f80b7aaArgyrios Kyrtzidis    static void explicit_special();
1690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis};
17f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis
18f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidistemplate <typename T>
19f511ba6277d240bbee1064715da8362a6edee5f3Argyrios KyrtzidisT templ_f(T x) {
20f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis  return x;
21f511ba6277d240bbee1064715da8362a6edee5f3Argyrios Kyrtzidis}
228dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
23bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidisvoid govl(int);
24bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidisvoid govl(char);
25bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis
26bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidistemplate <typename T>
27bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidisstruct Unresolv {
28bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis  void f() {
29bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis    govl(T());
30bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis  }
31bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis};
32bd65bb511c26549c96b829c1282e4c877588564aArgyrios Kyrtzidis
338dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidistemplate <typename T>
348dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisstruct Dep {
358dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  typedef typename T::type Ty;
368dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  void f() {
378dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis    Ty x = Ty();
388dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis    T::my_f();
398dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis    int y = T::template my_templf<int>(0);
40a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis    ovl(y);
418dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  }
42a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis
43a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis  void ovl(int);
44a77eb0862507b900a10fa352af1568e639ed10b1Argyrios Kyrtzidis  void ovl(float);
458dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis};
468dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis
478dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidistemplate<typename T, typename A1>
488dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidisinline T make_a(const A1& a1) {
498dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis  return T(a1);
508dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis}
51