#include <iostream>
using namespace std;
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, class = IsEnumConcept<T>>
//template<typename T>
//IsEnumConcept<T> out()
void out()
{
cout<<"for enum\n";
}
template<typename T, class = IsNotEnumConcept<T>>
//template<typename T>
//IsNotEnumConcept<T> out()
void out()
{
cout<<"for other\n";
}
enum class MyEnum{};
int main() {
out<MyEnum>();
out<int>();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdXNpbmcgSXNFbnVtQ29uY2VwdCA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPFQ+Ojp2YWx1ZT47CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnVzaW5nIElzTm90RW51bUNvbmNlcHQgPSBzdGQ6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX2VudW08VD46OnZhbHVlPjsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzID0gSXNFbnVtQ29uY2VwdDxUPj4KLy90ZW1wbGF0ZTx0eXBlbmFtZSBUPgovL0lzRW51bUNvbmNlcHQ8VD4gb3V0KCkKdm9pZCBvdXQoKQp7Cgljb3V0PDwiZm9yIGVudW1cbiI7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzID0gSXNOb3RFbnVtQ29uY2VwdDxUPj4KLy90ZW1wbGF0ZTx0eXBlbmFtZSBUPgovL0lzTm90RW51bUNvbmNlcHQ8VD4gb3V0KCkKdm9pZCBvdXQoKQp7Cgljb3V0PDwiZm9yIG90aGVyXG4iOwp9CgplbnVtIGNsYXNzIE15RW51bXt9OwoKaW50IG1haW4oKSB7CglvdXQ8TXlFbnVtPigpOwoJb3V0PGludD4oKTsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9
prog.cpp:20:6: error: redefinition of ‘template<class T, class> void out()’
void out()
^~~
prog.cpp:12:6: note: ‘template<class T, class> void out()’ previously declared here
void out()
^~~
prog.cpp: In function ‘int main()’:
prog.cpp:29:11: error: no matching function for call to ‘out()’
out<int>();
^
prog.cpp:12:6: note: candidate: template<class T, class> void out()
void out()
^~~
prog.cpp:12:6: note: template argument deduction/substitution failed: