1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> #include <typeinfo> #include <cxxabi.h> template <typename...> struct test {}; template <typename...> struct join; template < template <typename... HeadArgs> class Head, template <typename... TailArgs> class... > struct join<class Head<typename HeadArgs...>, class Head<typename TailArgs...>...> { typedef typename Head<typename HeadArgs..., typename TailArgs......> result; }; int main() { int status; std::cout << abi::__cxa_demangle(typeid(join<test<int, int, char>, test<double, double char>, test<int>>::result).name(), 0, 0, &status) << std::endl; return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxjeHhhYmkuaD4KCnRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gc3RydWN0IHRlc3Qge307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IHN0cnVjdCBqb2luOwoKdGVtcGxhdGUKPAoJdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEhlYWRBcmdzPiBjbGFzcyBIZWFkLAoJdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRhaWxBcmdzPiBjbGFzcy4uLgo+CnN0cnVjdCBqb2luPGNsYXNzIEhlYWQ8dHlwZW5hbWUgSGVhZEFyZ3MuLi4+LCBjbGFzcyBIZWFkPHR5cGVuYW1lIFRhaWxBcmdzLi4uPi4uLj4KewogICAgdHlwZWRlZiB0eXBlbmFtZSBIZWFkPHR5cGVuYW1lIEhlYWRBcmdzLi4uLCB0eXBlbmFtZSBUYWlsQXJncy4uLi4uLj4gcmVzdWx0Owp9OwoKaW50IG1haW4oKQp7CglpbnQgc3RhdHVzOwoJc3RkOjpjb3V0IDw8IGFiaTo6X19jeGFfZGVtYW5nbGUodHlwZWlkKGpvaW48dGVzdDxpbnQsIGludCwgY2hhcj4sIHRlc3Q8ZG91YmxlLCBkb3VibGUgY2hhcj4sIHRlc3Q8aW50Pj46OnJlc3VsdCkubmFtZSgpLCAwLCAwLCAmc3RhdHVzKSA8PCBzdGQ6OmVuZGw7CgoJcmV0dXJuIDA7Cn0=
prog.cpp:14:79: error: expected parameter pack before '...' prog.cpp: In function 'int main()': prog.cpp:22:89: error: two or more data types in declaration of 'type name'
-
result: Compilation error (maybe you wish to see an example for C++11)


