Я только что столкнулся с запутанной проблемой при попытке скомпилировать некоторый код с использованием g ++ 4.4.3.
Приведенный ниже код компилируется нормально, но вместо того, чтобы выполнить ожидаемое утверждение, когда я передаю «недопустимое» значение перечисления, функция просто возвращает 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;
}