Заголовок<<boost/core/explicit_operator_bool.hpp>>предоставляет<BOOST_EXPLICIT_OPERATOR_BOOL()>,<BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()>и<BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()>макросы-помощники совместимости, которые расширяются до явного оператора преобразования до<bool>. Для компиляторов, не поддерживающих явные операторы преобразования, введенные в C++11, макросы расширяются до оператора преобразования, который реализует безопасную идиомуbool. В случае, если компилятор не способен хорошо обрабатывать безопасную идиому, макросы расширяются до обычного оператора преобразования до<bool>.
Оба макроса должны быть помещены в определение класса пользователя. Сгенерированные операторы преобразования будут реализованы в терминах<operator!()>, которые должны быть определены пользователем в этом классе. В случае<BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL()>генерируемый оператор преобразования будет объявлен<constexpr>, что требует, чтобы соответствующий<operator!()>также был<constexpr>.
Добавлены новые макросы<BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT>и<BOOST_CONSTEXPR_EXPLICIT_OPERATOR_BOOL>для определения<noexcept>и<constexpr>операторов.
Статья explicit_operator_bool раздела Chapter 1. Boost.Core Chapter 1. Boost.Core может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.