LINUX.ORG.RU

История изменений

Исправление DELIRIUM, (текущая версия) :

Тебе нужно делать так:

-Werror=switch-enum

Пример:

enum class MegaEnum : char
{
  P = 'p',
  E = 'e',
  N = 'n',
  I = 'i',
  S = 's',
};

int main()
{
  MegaEnum c{MegaEnum::S};
  switch(c)
  {
    case MegaEnum::P:
    case MegaEnum::E:
    case MegaEnum::N:
    case MegaEnum::I:
      std::cout << "It's a penis part!" << std::endl;
      break;
    default:
      std::cout << "ALARM! NOT A PENIS PART!" << std::endl;
      break;
  }
}
$ g++ -Werror=switch-enum -std=c++11 test.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:15:9: error: enumeration value ‘S’ not handled in switch [-Werror=switch-enum]
   switch(c)
         ^
cc1plus: some warnings being treated as errors

Соответственно switch{} засовываешь в функцию. И оно у тебя будет проверяться на этапе компиляции (ну то есть не даст тебе пропустить при проверке ни одно значение из перечисления).

Исправление DELIRIUM, :

Тебе нужно делать так:

-Wswitch-enum -Werror

Пример:

enum class MegaEnum : char
{
  P = 'p',
  E = 'e',
  N = 'n',
  I = 'i',
  S = 's',
};

int main()
{
  MegaEnum c{MegaEnum::S};
  switch(c)
  {
    case MegaEnum::P:
    case MegaEnum::E:
    case MegaEnum::N:
    case MegaEnum::I:
      std::cout << "It's a penis part!" << std::endl;
      break;
    default:
      std::cout << "ALARM! NOT A PENIS PART!" << std::endl;
      break;
  }
}
$ g++ -Wswitch-enum -Werror -std=c++11 test.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:15:9: error: enumeration value ‘S’ not handled in switch [-Werror=switch-enum]
   switch(c)
         ^
cc1plus: all warnings being treated as errors

Соответственно switch{} засовываешь в функцию. И оно у тебя будет проверяться на этапе компиляции (ну то есть не даст тебе пропустить при проверке ни одно значение из перечисления).

Исходная версия DELIRIUM, :

Тебе нужно делать так:

-Wswitch-enum -Werror

Пример:

enum class MegaEnum : char
{
  P = 'p',
  E = 'e',
  N = 'n',
  I = 'i',
  S = 's',
};

int main()
{
  MegaEnum c{MegaEnum::S};
  switch(c)
  {
    case MegaEnum::P:
    case MegaEnum::E:
    case MegaEnum::N:
    case MegaEnum::I:
      std::cout << "It's a penis part!" << std::endl;
      break;
    default:
      std::cout << "ALARM! NOT A PENIS PART!" << std::endl;
      break;
  }
}
$ g++ -Wswitch-enum -Werror -std=c++11 test.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:15:9: error: enumeration value ‘S’ not handled in switch [-Werror=switch-enum]
   switch(c)
         ^
cc1plus: all warnings being treated as errors

Соответственно switch{} засовываешь в функцию. И оно у тебя будет проверяться на этапе компиляции.