fork(1) download
  1. #include <iostream>
  2. #include <cassert>
  3. #include <type_traits>
  4.  
  5. template<typename T> using Underlying = std::underlying_type_t<T>;
  6.  
  7. enum class ETest : int
  8. {
  9. Zero = 0,
  10. One = 1,
  11. Two = 2
  12. };
  13.  
  14. template<typename T> auto& castEnum(T& mX) noexcept
  15. {
  16. return reinterpret_cast<Underlying<T>&>(mX);
  17. }
  18.  
  19. template<typename T> const auto& castEnum(const T& mX) noexcept
  20. {
  21. return reinterpret_cast<const Underlying<T>&>(mX);
  22. }
  23.  
  24. int main()
  25. {
  26. auto x(ETest::Zero);
  27. castEnum(x) = 1;
  28. assert(x == ETest::One);
  29.  
  30. return 0;
  31. }
Success #stdin #stdout 0s 3092KB
stdin
Standard input is empty
stdout
Standard output is empty