Ответ 1
В Мадриде на нас сильно повлияло N3279, которое включает следующие рекомендации:
Принятые рекомендации
-
Ни один деструктор библиотеки не должен бросать. Они должны использовать неявную поставку (исключая метаданные) спецификацию исключений.
-
Каждая функция библиотеки, имеющая широкий контракт, который согласен LWG, не может выбрасывать, должна быть отмечена как безоговорочно noexcept.
-
Если функция обмена библиотекой, оператор move-constructor или оператор move-assign условно-широко (то есть может быть доказана, что не выбрасывается с помощью оператора noexcept), тогда он должен быть отмечен как условно noexcept. Никакая другая функция не должна использовать условную спецификацию noexcept.
-
Функции библиотеки, предназначенные для совместимости с кодом "C" (например, средство атомизации), могут быть отмечены как безоговорочно.
Я бы не стал интерпретировать эти рекомендации как неизбежные ориентированные на более широкую аудиторию. Это в основном признание того, что у нас есть проблемы с обратной совместимостью с добавлением noexcept. Если мы ошибаемся, noexcept легче добавить, чем удалить в следующем стандарте. Поэтому мы попытались применить noeccept, который был как консервативным, так и систематическим.