# V759. Violated the order of exception handlers. Exception caught handler for the base class.

Анализатор обнаружил множественные обработчики исключений с нарушенным порядком следования. Обработчик для базового класса исключений размещен перед обработчиком для производного класса. В таком случае все исключения, предназначенные для перехвата обработчиком производного класса, будут перехвачены обработчиком для базового класса.

Рассмотрим пример:

    class Exception { .... };
    class DerivedException : public Exception { ... };
    void foo()
    {
      throw DerivedException;
    }
    void bar()
    {
      try
      {
        foo();
      }
      catch (Exception&)
      {
        // Все исключения, имеющие тип DerivedException попадут сюда
      }
      catch (DerivedException&)
      {
        // Код в этом обработчике никогда не выполняется
      }
    }

Так как класс 'Exception' является базовым для класса 'DerivedException', исключения, которые генерирует функция 'foo()', перехватываются первым обработчиком.

Чтобы исправить ошибку, нужно поменять обработчики исключений местами:

    void bar()
    {
      try
      {
        foo();
      }
      catch (DerivedException&)
      {
        // Перехватывает исключения типа DerivedException
      }
      catch (Exception&)
      {
        // Перехватывает исключения типа Exception
      }
    }

Теперь каждый обработчик перехватывает исключения, предназначенные только для него.

Данная диагностика классифицируется как:

CWE-703 CERT-ERR54-CPP