История изменений
Исправление eao197, (текущая версия) :
Ни то ни другое
Ну вот для меня не понятно. Если мы знаем, что мы можем сделать в случае возникновения исключения X, то мы оборачиваем код в try/catch(X) и делаем обработку. Если мы не знаем что делать с исключением, но нам нужно как-то восстанавливаться, то используем RAII, но исключения не ловим (ну либо ловим для последующего переброса). И исключения можно ожидать отовсюду. За исключением таких методов, как swap или деструкторы.
Если нам нужно сделать какие-то действия в контексте, где исключения не должны возникать (например, при написании собственного swap), то мы просто выносим эти действия в noexcept-метод.
Главная проблема в том, что если мы написали свой swap, в котором использовали swap из библиотеки X версии 1 и он был noexcept, а потом перешли на версию 2 и там он уже не-noexcept. Здесь бы хотелось каких-то гарантий. Или простых способов записывать подобные контракты в коде самому (вроде бы в C++17 это можно будет делать, т.к. там noexcept входит в сигнатуру функции).
что в XCode нельзя отфильтровать несколько исключений и ситуация в духе «запустили под дебагером - посмотрели где отвалилось» усложняется
А можно подробнее? А то я не могу себе представить о чем речь.
Исходная версия eao197, :
Ни то ни другое
Ну вот для меня не понятно. Если мы знаем, что мы можем сделать в случае возникновения исключения X, то мы оборачиваем код в try/catch(X) и делаем обработку. Если мы не знаем что делать с исключением, но нам нужно как-то восстанавливаться, то используем RAII, но исключения не ловим (ну либо ловим для последующего переброса). И исключения можно ожидать отовсюду. За исключением таких методов, как swap или деструкторы.
Если нам нужно сделать какие-то действия в контексте, где исключения не должны возникать (например, при написании собственного swap), то мы просто выносим эти действия в noexcept-метод.
Главная проблема в том, что если мы написали свой swap, в котором использовали swap из библиотеки X версии 1 и он был noexcept, а потом перешли на версию 2 и там он noexcept. Здесь бы хотелось каких-то гарантий. Или простых способов записывать подобные контракты в коде самому (вроде бы в C++17 это можно будет делать, т.к. там noexcept входит в сигнатуру функции).
что в XCode нельзя отфильтровать несколько исключений и ситуация в духе «запустили под дебагером - посмотрели где отвалилось» усложняется
А можно подробнее? А то я не могу себе представить о чем речь.