#include <iostream>
template<typename T>
using IsEnumConcept = std::enable_if_t<std::is_enum<T>::value>;
template<typename T>
using IsNotEnumConcept = std::enable_if_t<!std::is_enum<T>::value>;
template<typename T, typename = void>
struct OutImpl;
template <typename T>
struct OutImpl<T, IsEnumConcept<T>>
{
void operator()() const { std::cout<<"for enum\n"; }
};
template <typename T>
struct OutImpl<T, IsNotEnumConcept<T>>
{
void operator()() const { std::cout<<"for not enum\n"; }
};
template<typename T>
void out()
{
OutImpl<T>()();
}
enum class MyEnum{};
int main() {
out<MyEnum>();
out<int>();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdXNpbmcgSXNFbnVtQ29uY2VwdCA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT47CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnVzaW5nIElzTm90RW51bUNvbmNlcHQgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46OnZhbHVlPjsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdm9pZD4Kc3RydWN0IE91dEltcGw7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IE91dEltcGw8VCwgSXNFbnVtQ29uY2VwdDxUPj4KewoJdm9pZCBvcGVyYXRvcigpKCkgY29uc3QgeyBzdGQ6OmNvdXQ8PCJmb3IgZW51bVxuIjsgfQkKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgT3V0SW1wbDxULCBJc05vdEVudW1Db25jZXB0PFQ+Pgp7Cgl2b2lkIG9wZXJhdG9yKCkoKSBjb25zdCB7IHN0ZDo6Y291dDw8ImZvciBub3QgZW51bVxuIjsgfQkKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgb3V0KCkKewoJT3V0SW1wbDxUPigpKCk7Cn0KCmVudW0gY2xhc3MgTXlFbnVte307CgppbnQgbWFpbigpIHsKCW91dDxNeUVudW0+KCk7CglvdXQ8aW50PigpOwp9Cg==