Как сейчас правильно указывать, что функция выбрасывает исключения? Писать throw(...) или перечислять возможные исключения или вообще ничего не писать?
И еще вопрос: что указывается в скобках после noexcept?
Если функция выбрасывает исключения - то ничего не писать. (Или можно эквивалентно написать noexcept(false)).
Что указывается в скобках noexcept зависит от того, о каком noexcept вы говорите. Есть оператор noexcept, а есть спецификатор noexcept.
Оператор noexcept проверяет noexcept-статус выражения. Это оператор времени компиляции. В качестве операнда указывается выражение, чей noexcept-статус вы хотите узнать. Оператор на стадии компиляции вернет true или false.
Спецификатор noexcept наоборот назначает noexcept-статус функции. Он декларирует, является ли данная функция noexcept или не является. Просто noexcept говорит, что функция является noexcept. А в варианте с булевским операндом noexcept-статус определяется значением булевского выражения.
Например, в следующем примере используется как оператор noexcept, так и спецификатор noexcept
void bar() noexcept(noexcept(foo()));
^ ^
| |
| оператор
спецификатор
Функция bar() в результате получит тот же noexcept-статус, что и функция foo().
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники