Я недавно просматривал это толстое руководство, чтобы иметь более ясное и глубокое понимание C ++, и я наткнулся на этот фрагмент кода в Разделе 8.4.2 (стр. 222), который я считаю ошибкой.
Вот код:
enum Traffic_light { red, yellow, green };
enum Warning { green, yellow, orange, red }; // fire alert levels
// error : two definitions of yellow (to the same value)
// error : two definitions of red (to different values)
Warning a1 = 7; // error : no int->Warning conversion
int a2 = green; // OK: green is in scope and converts to int
int a3 = Warning::green; // OK: War ning->int conversion
Warning a4 = Warning::green; // OK
void f(Traffic_light x)
{
if (x == 9) { /* ... */ } // OK (but Traffic_light doesn’t have a 9)
if (x == red) { /* ... */ } // error : two reds in scope
if (x == Warning::red) { /* ... */ } // OK (Ouch!)
if (x == Traffic_light::red) { /* ... */ } // OK
}
Не должно быть комментария к ошибке третьей строки, как это:
// error : two definitions of green (two different values)
В остальной части кода предполагается, что зеленый существует только в одной области перечисления.