Наследники:Если (i)lhsтипаLhsиrhsтипаRhsможно использовать в выраженииlhs|=rhsи (ii)Ret=dont_careили результат выраженияlhsrhsконвертируется в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_assign<Lhs, Rhs, Ret>::value==true
ЕслиRet=void, то тип возврата проверяется на то, чтобы быть точноvoid.
Совместимость компиляторов:Требуется работа SFINAE (т.е. BOOST_NO_SFINAE не установлен). Этого не поддерживает лишь меньшинство довольно старых компиляторов.
Эта черта не может определить, является ли двоичныйоператор|=общедоступным или нет: еслиоператор|=определен как частный членLhs, то инстанциацияимеет_bit_or_assign<Lhs>приведет к ошибке компилятора. По этой причинеимеет_bit_or_assignне может использоваться для определения, имеет ли тип публичныйоператор|=частный:пустой|=констконст];бустер::имеет_bit_or_assign<>];:значение// ошибка: A:
Существует проблема, если оператор существует только для типаАиВявляется конвертируемым вА. В этом случае компилятор сообщит о двусмысленной перегрузке.
Существует проблема при применении этой черты к классам шаблонов. Еслиоператор|=определен, но не связывается для данного типа шаблона, он все равно обнаруживается чертой, которая возвращаетистинноевместоложное. Пример:
[5
летучийклассификатор не обрабатывается должным образом и приведет к неопределенному поведению
Статья has_bit_or_assign раздела Chapter 1. Boost.TypeTraits Alphabetical Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.