Наследства: Если (i) lhs и rhs типа Rhs |rhs, и (ii) Ret=dont_care или результат выражения lhs конвертируется в Ret, то наследуется от true_type, в противном случае наследуется от false_type.
Поведение по умолчанию (Ret=Dont_care) заключается в том, чтобы не проверять обратное значение двоичного оператор | Если Ret отличается от типа по умолчанию dont_care, то обратное значение проверяется на конвертируемость в Ret. Преобразуемое в Ret означает, что возвращаемое значение оператора может быть использовано в качестве аргумента для функции, ожидающей Ret:
voidf(Ret);Lhslhs;Rhsrhs;f(lhs|rhs);// is valid if has_bit_or<Lhs, Rhs, Ret>::value==true
Если Ret=void, то тип возврата проверяется точно на void.
Совместимость с компилятором: Требуется работа SFINAE (т.е. BOOST_NO_SFINAE не установлен). Этого не поддерживает лишь меньшинство довольно старых компиляторов.
Примеры:
has_bit_or<Lhs,Rhs,Ret>::value_type является типом bool.
has_bit_or<Lhs,Rhs,Ret>::значение представляет собой bool интегральное постоянное выражение.
has_bit_or<int>::value представляет собой bool интегральное постоянное выражение, которое оценивает до true.
Эта черта не может определить, является ли бинарный оператор | публичным или нет: если оператор | определен как частный член Lhs, то инстанцирование has_bit_or<Lhs> приведет к ошибке компилятора. По этой причине has_bit_or не может использоваться для определения того, имеет ли тип публичный оператор | или нет.
Существует проблема, если оператор существует только для типа A и B является конвертируемым в A. В этом случае компилятор сообщит о двусмысленной перегрузке.
структура оператор констA&;структура ();буст::2>хаз_бит_или >::буст>::B
Существует проблема при применении этой черты к классам шаблонов. Если оператор >структура ;>содержит , , , , , , , , > , , > > > > > , > >>, , , , , ,
энергонезависимый квалификатор не обрабатывается должным образом и приведет к неопределенному поведению
Статья has_bit_or раздела Chapter 1. Boost.TypeTraits Alphabetical Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.