#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=