#include <iostream>
enum E
{
A,
B,
C
};
class Some
{
public:
template<E x>
typename std::enable_if<x == E::A, void>::type func()
{
std::cout << "A\n";
}
template<E x>
typename std::enable_if<x == E::B, void>::type func()
{
std::cout << "B\n";
}
template<E x>
typename std::enable_if<x == E::C, void>::type func()
{
std::cout << "C\n";
}
};
int main()
{
Some some;
some.func<E::A>();
some.func<E::B>();
some.func<E::C>();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZW51bSBFCnsKICAgIEEsCiAgICBCLAogICAgQwp9OwoKY2xhc3MgU29tZQp7CnB1YmxpYzoKICAgIHRlbXBsYXRlPEUgeD4KICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHggPT0gRTo6QSwgdm9pZD46OnR5cGUgZnVuYygpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJBXG4iOwogICAgfQogICAgdGVtcGxhdGU8RSB4PgogICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8eCA9PSBFOjpCLCB2b2lkPjo6dHlwZSBmdW5jKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkJcbiI7CiAgICB9CiAgICB0ZW1wbGF0ZTxFIHg+CiAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjx4ID09IEU6OkMsIHZvaWQ+Ojp0eXBlIGZ1bmMoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQ1xuIjsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgU29tZSBzb21lOwogICAgc29tZS5mdW5jPEU6OkE+KCk7CiAgICBzb21lLmZ1bmM8RTo6Qj4oKTsKICAgIHNvbWUuZnVuYzxFOjpDPigpOwogICAgcmV0dXJuIDA7Cn0K