fork download
  1. #include <iostream>
  2.  
  3. #define ENUM_CLASS(NAME, TYPE, VALUES...) \
  4. struct NAME { \
  5.   enum e { VALUES }; \
  6.   explicit NAME(TYPE v) : val(v) {} \
  7.   NAME(e v) : val(v) {} \
  8.   operator e() const { return e(val); } \
  9.   private:\
  10.   TYPE val; \
  11. }
  12.  
  13. struct Enum;
  14.  
  15. void f(Enum e);
  16.  
  17. ENUM_CLASS(Enum, int,
  18. VALUE,
  19. ANOTHER_VALUE
  20. );
  21.  
  22. void f (Enum e)
  23. {
  24. switch(e)
  25. {
  26. case Enum::VALUE:
  27. std::cout << "VALUE" << std::endl;
  28. return;
  29. case Enum::ANOTHER_VALUE:
  30. std::cout << "ANOTHER_VALUE" << std::endl;
  31. return;
  32. }
  33.  
  34. Enum e2 = (Enum)(e | Enum::VALUE);
  35. }
  36.  
  37. int main()
  38. {
  39. f(Enum::ANOTHER_VALUE);
  40. return 0;
  41. }
Success #stdin #stdout 0.01s 2680KB
stdin
Standard input is empty
stdout
ANOTHER_VALUE