fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. using namespace std;
  4.  
  5. // должно было быть enum E { A, Q, R };
  6. // не должно быть enum E { X, Y, Z };
  7. enum E { A, B, C, Z };
  8. int R; // случайно определили вне энума
  9.  
  10. int Y;
  11. // для тех имён, которые нигде не определены "по-настоящему", сделаем затычку
  12. namespace last_chance { enum EE { X, Z }; }
  13.  
  14. void checker() {
  15. using namespace last_chance; // задействуем затычку
  16.  
  17. // white list
  18. static_assert( std::is_same<::E, decltype(A)>::value, "A is not defined" );
  19. static_assert( std::is_same<::E, decltype(Q)>::value, "A is not defined" ); // ERROR
  20. static_assert( std::is_same<::E, decltype(R)>::value, "A is not defined" ); // ERROR
  21.  
  22. // black list
  23. static_assert( !std::is_same<::E, decltype(X)>::value, "X is defined!" );
  24. static_assert( !std::is_same<::E, decltype(Y)>::value, "Y is defined!" );
  25. static_assert( !std::is_same<::E, decltype(Z)>::value, "Z is defined!" ); // ERROR
  26. }
  27.  
  28.  
  29. int main() {
  30. // your code goes here
  31. return 0;
  32. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'void checker()':
prog.cpp:19:44: error: 'Q' was not declared in this scope
  static_assert( std::is_same<::E, decltype(Q)>::value, "A is not defined" ); // ERROR
                                            ^
prog.cpp:19:46: error: template argument 2 is invalid
  static_assert( std::is_same<::E, decltype(Q)>::value, "A is not defined" ); // ERROR
                                              ^
prog.cpp:20:2: error: static assertion failed: A is not defined
  static_assert( std::is_same<::E, decltype(R)>::value, "A is not defined" ); // ERROR
  ^
prog.cpp:25:47: error: template argument 2 is invalid
  static_assert( !std::is_same<::E, decltype(Z)>::value, "Z is defined!" ); // ERROR
                                               ^
stdout
Standard output is empty