Skip to content

Удалить бросания исключения примитивного типа #401

Description

@apolukhin

Перенос предложения: голоса +11, -7
Автор идеи: Игорь Шаповал

В С++17 удалили с стандарта Dynamic exception specification. Для того чтобы использовать свои исключения, мы должны создать класс и унаследоваться от std::exception. Мы должны переопределить метод what(). Но в стандарте мы можем кидать исключения еще примитивного типа.

try {
  throw 5;
} catch (...) {
   cout << "what does it mean?" << endl;
}

На практике исключения такого типа безполезны. Во-первых, если как в коде выше, то все понятно. Во-вторых, если это исключение брошеное в какой-то библиотеке, где мы имеем только заголовочные файлы. Это кошмар! Во-третих, каждый программист согласится, что это плохая техника написания кода. Предлагаю удалить с стандарта кидания исключения примитивного типа и оставить только кидания типа класса.

try {
  routine();
} catch (const understand_exception& e) {
    cout << "Catch understand exception: " << e.what() << endl;
}

Надеюсь что в стандарт добавят stacktrace. В Java stacktrace используется с исключениями с начала добавления исключения. Хотелось в С++ иметь также. В С++17 начали чистить языковые и библиотечные возможности. Надеюсь что это также попадет под чистку.

Metadata

Metadata

Assignees

No one assigned

    Labels

    На паузеМеждународный комитет холодно встретил идею, нужно переосмыслить идею и вернуться к ней позднее

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions