Наследства: Если (i) lhs и 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_xor<Lhs, Rhs, Ret>::value==true
Если Ret=void, то тип возврата проверяется точно на void.
Совместимость с компилятором: Требуется работа SFINAE (т.е. BOOST_NO_SFINAE не установлен). Этого не поддерживает лишь меньшинство довольно старых компиляторов.
Примеры:
has_bit_xor<Lhs,Rhs,Ret>::value_type является типом bool.
has_bit_xor<Lhs,Rhs,Ret>::значение представляет собой bool интегральное постоянное выражение.
has_bit_xor<int>::value представляет собой bool интегральное постоянное выражение, которое оценивает до true.
Эта черта не может определить, является ли двоичный оператор публичным или нет: если оператор^ определен как частный член Lhs, то инстанцирование has_bit_xor<Lhs> приведет к ошибке компилятора. По этой причине has_bit_xor не может использоваться для определения того, имеет ли тип публичный оператор^ или нет.
структура { void ^(const&);;boost::has_bit_xor<>::значение;/ошибка: A::оператор^(const A&) является частным
Существует проблема, если оператор существует только для типа A и B является конвертируемым в A. В этом случае компилятор сообщит о двусмысленной перегрузке.
структура констA&;структура B();буст::2> буст>::буст::2>B>:2>
Существует проблема при применении этой черты к классам шаблонов. Если операторструктура;>содержит , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <2
энергонезависимый квалификатор не обрабатывается должным образом и приведет к неопределенному поведению
Статья has_bit_xor раздела Chapter 1. Boost.TypeTraits Alphabetical Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.