◐ Shell
clean mode source ↗

std::bad_exception — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

class bad_exception;

std::bad_exception это тип исключения, генерируемого средой выполнения C++ в следующих ситуациях:

  • Если std::exception_ptr хранит копию перехваченного исключения и если конструктор копирования объекта исключения, перехваченного std::current_exception, генерирует исключение, перехваченное исключение является экземпляром std::bad_exception.
(начиная с C++11)
  • Если спецификация динамического исключения нарушена и std::unexpected генерирует или повторно генерирует исключение, которое по-прежнему нарушает спецификацию исключения, но спецификация исключения допускает std::bad_exception, std::bad_exception генерируется.
(до C++17)
cpp/error/exception

Диаграмма наследования

Функции-элементы

создаёт объект bad_exception
(public функция-элемент)
копирует объект
(public функция-элемент)
возвращает пояснительную строку
(virtual public функция-элемент)

Унаследован от std::exception

Функции-элементы

уничтожает объект исключения
(virtual public of std::exception функция-элемент) [править]
возвращает поясняющую строку
(virtual public of std::exception функция-элемент) [править]

Пример

Компилируется только в режиме C++14 (или более ранней версии).

#include <iostream>
#include <exception>
#include <stdexcept>

void my_unexp()
{ 
    throw;
}

// Спецификации динамических исключений устарели в C++11
void test() throw(std::bad_exception)
{
    throw std::runtime_error("тест");
}

int main()
{
    // Устарело в C++11, удалено в C++17
    std::set_unexpected(my_unexp);
    try {
         test();
    } catch(const std::bad_exception& e)
    {
        std::cerr << "Поймано " << e.what() << '\n';
    }
}

Возможный вывод:

Поймано std::bad_exception