Я просто попал в запутанную проблему при попытке скомпилировать некоторый код с помощью g++ 4.4.3.
Код ниже компилируется отлично, но вместо того, чтобы нажимать ожидаемое утверждение, когда я передаю "недопустимое" значение enum, функция просто возвращает 1. То, что я нахожу еще более странным, - это то, что когда я раскомментирую строки, относящиеся к значению перечисления E3, все начинает работать, как ожидалось.
Тот факт, что в блоке коммутатора нет записи по умолчанию, по дизайну. Мы компилируем с параметром -Wall для получения предупреждений о необработанных значениях перечисления.
enum MyEnum
{
E1,
E2,
//E3
};
int doSomethingWithEnum(MyEnum myEnum)
{
switch (myEnum)
{
case E1: return 1;
case E2: return 2;
//case E3: return 3;
}
assert(!"Should never get here");
return -1;
}
int main(int argc, char **argv)
{
// Should trigger assert, but actually returns 1
int retVal = doSomethingWithEnum(static_cast<MyEnum>(4));
std::cout << "RetVal=" << retVal << std::endl;
return 0;
}