fork(1) download
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. enum class EnumClass { A, B = 4, C = 9, D = 60 };
  5.  
  6. template <int I> struct check_enum { static const bool value = false; };
  7. template <> struct check_enum<static_cast<int>(EnumClass::A)> { static const bool value = true; };
  8. template <> struct check_enum<static_cast<int>(EnumClass::B)> { static const bool value = true; };
  9. template <> struct check_enum<static_cast<int>(EnumClass::C)> { static const bool value = true; };
  10. template <> struct check_enum<static_cast<int>(EnumClass::D)> { static const bool value = true; };
  11.  
  12. template <int I> constexpr bool is_value_valid = false;
  13. template <> constexpr bool is_value_valid<static_cast<int>(EnumClass::A)> = true;
  14. template <> constexpr bool is_value_valid<static_cast<int>(EnumClass::B)> = true;
  15. template <> constexpr bool is_value_valid<static_cast<int>(EnumClass::C)> = true;
  16. template <> constexpr bool is_value_valid<static_cast<int>(EnumClass::D)> = true;
  17.  
  18. int main(int, char **)
  19. {
  20. static_assert(check_enum<0>::value, "invalid enum value"); // ok!
  21. static_assert(check_enum<1>::value, "invalid enum value"); // compile error
  22.  
  23. static_assert(is_value_valid<0>, "invalid enum value"); // ok!
  24. static_assert(is_value_valid<1>, "invalid enum value"); // compile error
  25.  
  26. return 0;
  27. }
Compilation error #stdin compilation error #stdout 0s 2852KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int main(int, char**)':
prog.cpp:15:5: error: static assertion failed: invalid enum value
     static_assert(check_enum<1>::value, "invalid enum value"); // compile error
     ^
stdout
Standard output is empty