#include <iostream>
#include <type_traits>
#include <typeinfo>
enum MyType
{
A,
B
};
template<MyType>
struct MyStruct {
MyStruct(int, double){};
};
template<MyType type>
MyStruct<type> createMyStruct()
{
return {0, 1.1};
}
int main()
{
auto structA = createMyStruct<A>();
auto structB = createMyStruct<B>();
std::cout << typeid(structA).name() << std::endl;
std::cout << typeid(structB).name() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx0eXBlaW5mbz4KCmVudW0gTXlUeXBlCnsKICAgIEEsCiAgICBCCn07Cgp0ZW1wbGF0ZTxNeVR5cGU+CnN0cnVjdCBNeVN0cnVjdCB7CiAgICBNeVN0cnVjdChpbnQsIGRvdWJsZSl7fTsKfTsKCnRlbXBsYXRlPE15VHlwZSB0eXBlPgpNeVN0cnVjdDx0eXBlPiBjcmVhdGVNeVN0cnVjdCgpCnsKICAgIHJldHVybiB7MCwgMS4xfTsKfQoKaW50IG1haW4oKQp7CiAgICBhdXRvIHN0cnVjdEEgPSBjcmVhdGVNeVN0cnVjdDxBPigpOwogICAgYXV0byBzdHJ1Y3RCID0gY3JlYXRlTXlTdHJ1Y3Q8Qj4oKTsKCiAgICBzdGQ6OmNvdXQgPDwgdHlwZWlkKHN0cnVjdEEpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgdHlwZWlkKHN0cnVjdEIpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7Cn0=