#include <iostream>
#include <typeinfo>
using namespace std;
template <class T, class X>
struct TemplatePrototypeOne {
void doSomethingElse() {
cout << "TemplatePrototypeOne<" << typeid(T).name()
<< "," << typeid(X).name() << ">" << endl;
}
};
template <template<class...> class TemplatePrototype,
class ... Ts>
void doSomething()
{
TemplatePrototype<Ts...> aTemplateTX;
aTemplateTX.doSomethingElse();
}
int main() {
doSomething<TemplatePrototypeOne,int,float>();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgWD4Kc3RydWN0IFRlbXBsYXRlUHJvdG90eXBlT25lIHsKCXZvaWQgZG9Tb21ldGhpbmdFbHNlKCkgewoJCWNvdXQgPDwgIlRlbXBsYXRlUHJvdG90eXBlT25lPCIgPDwgdHlwZWlkKFQpLm5hbWUoKQoJCQk8PCAiLCIgPDwgdHlwZWlkKFgpLm5hbWUoKSA8PCAiPiIgPDwgZW5kbDsKCX0KfTsKCnRlbXBsYXRlIDx0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xhc3MgVGVtcGxhdGVQcm90b3R5cGUsCiAgICAgICAgICBjbGFzcyAuLi4gVHM+CnZvaWQgZG9Tb21ldGhpbmcoKQp7CiAgICBUZW1wbGF0ZVByb3RvdHlwZTxUcy4uLj4gYVRlbXBsYXRlVFg7CiAgICBhVGVtcGxhdGVUWC5kb1NvbWV0aGluZ0Vsc2UoKTsKfQoKaW50IG1haW4oKSB7Cglkb1NvbWV0aGluZzxUZW1wbGF0ZVByb3RvdHlwZU9uZSxpbnQsZmxvYXQ+KCk7CglyZXR1cm4gMDsKfQ==