noexcept(expression) вернет true если выражение
помечено как noexcept и false _ в обратном случаи...А для чего нужны спецификации исключения noexcept(true) и noexcept(false), как и когда они используются?..
В зависимотсти от того, где находится noexcept( ... ), он может имеет два разных назначения. Одно вы назвали (проверка выражения на noexcept-ность), а вот второе:
void func() noexcept(условие) {...}
Здесь, func будет являться noexcept только если условие истинно.
noexcept(true) эквивалентен noexcept, поэтому редко используется.
noexcept(false) обычно эквивалентен отсутствию noexcept, с одним исключением:
Если функция является noexcept по умолчанию (например, любой деструктор), то noexcept(false) позволяет сделать ее не noexcept.
Еще, иногда можно увидеть вот такую запись:
void func() noexcept(noexcept(выражение)) {...}
Здесь функция станет noexcept, только если указанное выражение является noexcept.
Функции:
void foo() noexcept(true);
void foo() noexcept(false);
— являются функции с разными типами (не могут формировать перегруженный набор). Это позволяет, например, интерфейсу приложения требовать callback_и, которые (не) выбрасывают исключений
Сборка персонального компьютера от Artline: умный выбор для современных пользователей