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

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



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

```cpp
class Exception { .... };
class DerivedException : public Exception { ... };
void foo()
{
  throw DerivedException;
}

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

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

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

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

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