#include <iostream>
#include <type_traits>
enum class EnumClass {};
enum Enum {};
class Class {};
template<typename E>
using is_class_enum = std::integral_constant<
bool,
std::is_enum<E>::value && !std::is_convertible<E, int>::value>;
int main(int argc, char* argv[]) {
std::cout << is_class_enum<EnumClass>::value << '\n';
std::cout << is_class_enum<Enum>::value << '\n';
std::cout << is_class_enum<Class>::value << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgplbnVtIGNsYXNzIEVudW1DbGFzcyB7fTsKZW51bSBFbnVtIHt9OwpjbGFzcyBDbGFzcyB7fTsKCnRlbXBsYXRlPHR5cGVuYW1lIEU+CnVzaW5nIGlzX2NsYXNzX2VudW0gPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PAogIGJvb2wsCiAgc3RkOjppc19lbnVtPEU+Ojp2YWx1ZSAmJiAhc3RkOjppc19jb252ZXJ0aWJsZTxFLCBpbnQ+Ojp2YWx1ZT47CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CiAgc3RkOjpjb3V0IDw8IGlzX2NsYXNzX2VudW08RW51bUNsYXNzPjo6dmFsdWUgPDwgJ1xuJzsKICBzdGQ6OmNvdXQgPDwgaXNfY2xhc3NfZW51bTxFbnVtPjo6dmFsdWUgPDwgJ1xuJzsKICBzdGQ6OmNvdXQgPDwgaXNfY2xhc3NfZW51bTxDbGFzcz46OnZhbHVlIDw8ICdcbic7CiAgcmV0dXJuIDA7Cn0=