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 26 27 28 29 | #include <iostream> #include <typeinfo> #include <cxxabi.h> template <typename...> struct join; template <template <typename...> class Tpl, template <typename...> class..., typename... Args> struct join<Tpl<Args...>...> { typedef Tpl<Args......> type; }; template <typename...> struct test {}; int main() { int status; std::cout << abi::__cxa_demangle(typeid( join < test<int, int, double>, test<double, char, test<int>>, test<double, double, const char> >::type).name(), 0, 0, &status) << std::endl; return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxjeHhhYmkuaD4KCnRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gc3RydWN0IGpvaW47Cgp0ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBUcGwsCiAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzLi4uLAogICAgICAgICAgdHlwZW5hbWUuLi4gQXJncz4Kc3RydWN0IGpvaW48VHBsPEFyZ3MuLi4+Li4uPgp7CiAgICB0eXBlZGVmIFRwbDxBcmdzLi4uLi4uPiB0eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBzdHJ1Y3QgdGVzdCB7fTsKCmludCBtYWluKCkKewoJaW50IHN0YXR1czsKICAgIHN0ZDo6Y291dCA8PCBhYmk6Ol9fY3hhX2RlbWFuZ2xlKHR5cGVpZCgKICAgICAgICBqb2luCiAgICAgICAgPAogICAgICAgICAgICB0ZXN0PGludCwgaW50LCBkb3VibGU+LAogICAgICAgICAgICB0ZXN0PGRvdWJsZSwgY2hhciwgdGVzdDxpbnQ+PiwKICAgICAgICAgICAgdGVzdDxkb3VibGUsIGRvdWJsZSwgY29uc3QgY2hhcj4KICAgICAgICA+Ojp0eXBlKS5uYW1lKCksIDAsIDAsICZzdGF0dXMpIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAKCXJldHVybiAwOwp9
prog.cpp:10:25: error: expansion pattern 'Tpl<Args ...>' contains no argument packs prog.cpp: In function 'int main()': prog.cpp:21:9: error: incomplete type 'join<test<int, int, double>, test<double, char, test<int> >, test<double, double, const char> >' used in nested name specifier
-
result: Compilation error (maybe you wish to see an example for C++11)


