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