fork download
  1. #include <iostream>
  2. #include <exception>
  3.  
  4. enum class Launches : std::uint32_t
  5. {
  6. First = 0,
  7.  
  8. D_FROM_FILE = First,
  9. D_FROM_FDISK,
  10. D_FROM_RDDISK,
  11. D_FROM_USB,
  12. D_FROM_UI,
  13. D_FROM_NET,
  14. D_FROM_DEFAULT,
  15.  
  16. Last = D_FROM_DEFAULT
  17. };
  18.  
  19. template< typename E, typename T >
  20. Launches seq_enum_cast(T v)
  21. {
  22. return v >= static_cast<T>(E::First) && v <= static_cast<T>(E::Last)
  23. ? static_cast<E>(v)
  24. : throw std::bad_cast();
  25. }
  26.  
  27. int main()
  28. {
  29. try
  30. {
  31. auto a = seq_enum_cast<Launches>(1);
  32. std::cout << "a - success\n";
  33. auto b = seq_enum_cast<Launches>(-3); // fails
  34. std::cout << "b - success\n";
  35. }
  36. catch (const std::bad_cast& e)
  37. {
  38. std::cout << e.what();
  39. }
  40. }
Success #stdin #stdout 0.01s 5460KB
stdin
Standard input is empty
stdout
a - success
std::bad_cast