fork(1) download
  1. #include <iostream>
  2.  
  3. template<typename T>
  4. using IsEnumConcept = std::enable_if_t<std::is_enum<T>::value>;
  5. template<typename T>
  6. using IsNotEnumConcept = std::enable_if_t<!std::is_enum<T>::value>;
  7.  
  8. template<typename T, typename = void>
  9. struct OutImpl;
  10.  
  11. template <typename T>
  12. struct OutImpl<T, IsEnumConcept<T>>
  13. {
  14. void operator()() const { std::cout<<"for enum\n"; }
  15. };
  16.  
  17. template <typename T>
  18. struct OutImpl<T, IsNotEnumConcept<T>>
  19. {
  20. void operator()() const { std::cout<<"for not enum\n"; }
  21. };
  22.  
  23. template<typename T>
  24. void out()
  25. {
  26. OutImpl<T>()();
  27. }
  28.  
  29. enum class MyEnum{};
  30.  
  31. int main() {
  32. out<MyEnum>();
  33. out<int>();
  34. }
  35.  
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
for enum
for not enum