20 Library introduction [library]

20.5 Library-wide requirements [requirements]

20.5.5 Conforming implementations [conforming]

20.5.5.12 Restrictions on exception handling [res.on.exception.handling]

Любая из функций, определенных в стандартной библиотеке C ++, может сообщать о сбое, генерируя исключение типа, описанного в его Throws: абзаце, или типа, производного от типа, названного в Throws: абзаце, которое будет перехвачено обработчиком исключений для базового типа. .

Функции из стандартной библиотеки C не должны вызывать исключения, 183 за исключением случаев, когда такая функция вызывает программную функцию, которая вызывает исключение.184

Операции деструктора, определенные в стандартной библиотеке C ++, не должны вызывать исключений. Каждый деструктор в стандартной библиотеке C ++ должен вести себя так, как если бы он имел спецификацию исключения, не вызывающего выброса.

Функции, определенные в стандартной библиотеке C ++, которые не имеют Throws: абзаца, но имеют спецификацию потенциально вызывающего исключения, могут вызывать исключения, определяемые реализацией.185 Реализации должны сообщать об ошибках, бросая исключения из или полученных из стандартных классов исключений ([bad.alloc], [support.exception], [std.exceptions]).

Реализация может усилить спецификацию исключения для невиртуальной функции, добавив спецификацию исключения исключения.

То есть все функции библиотеки C можно рассматривать так, как если бы они были отмечены noexcept. Это позволяет реализациям оптимизировать производительность на основе отсутствия исключений во время выполнения.

Функции qsort() и bsearch() ([alg.c.library]) удовлетворяют этому условию.

В частности, они могут сообщить об ошибке выделения хранилища, выбрасывая исключение типа bad_­allocили класса, производного от bad_­alloc.