# V2006. Implicit type conversion from enum type to integer type.

Данное диагностическое правило добавлено по просьбе пользователей.

Анализатор позволяет обнаружить все неявные приведения enum-типов к целочисленным типам.

Диагностическое правило V2006 помогает выполнить рефакторинг кода и иногда выявить ошибки.

Пример конструкции, на которую анализатор выдаст данное диагностическое сообщение:

    enum Orientation {
      Horizontal = 0x1,
      Vertical = 0x2
    };
    Orientation orientation = Horizontal;
    int pos = orientation; // V2006

Диагностическое сообщение V2006 не выдается в следующих случаях.

Первое. Анализатор не предупреждает о сравнении именованной константы перечисления с переменной имеющий тип, например 'int'. Хотя перед началом сравнения константа неявно приводится к типу 'int', такое встречается слишком часто, чтобы выдавать на это предупреждение.

    int pos = foo();
    if (pos == Vertical) // Ok
    {
      ....
    }

Второе. Сравниваются две константы перечисляемого типа:

    enum E
    {
      ZERO, ONE, TWO
    };

    void foo(E e1, E e2)
    {
      if (e1 == e2)      // ok
        ....
      else if (e1 > e2)  // ok
        ....
      else if (e1 != e2) // ok
        ....
    }

Третье. Неявное преобразование типа происходит при сдвиге именованной константы, чтобы инициализировать другую именованную константу или элементы массива:

    enum E
    {
      FIRST_BIT = 1,
      SECOND_BIT = FISRT_BIT << 1, // ok
      THIRD_BIT = FISRT_BIT << 2,  // ok
      ....
    };
    int A[3] = {
      FIRST_BIT,
      FIRST_BIT << 1, // ok
      FIRST_BIT << 2  // ok
    };