template <class Lhs, class Rhs=Lhs, class Ret=dont_care>
struct has_left_shift_assign : public true_type-or-false_type
{};
Наследства: Если (i) lhs
и rhs
типа Rhs
, и (ii) Retdont_care
или результат выражения lhs
можно преобразовать в Ret
, то наследуется от true_type, в противном случае наследуется от false_type.
По умолчанию поведение (Ret=dont_care
) не проверяется на обратное значение двоичного оператора<<=
. Если Ret
отличается от типа dont_care
, значение возврата проверяется на конвертируемость в Ret
. Преобразуемое в Ret
означает, что возвращаемое значение оператора может быть использовано в качестве аргумента для функции, ожидающей Ret
:
void f(Ret);
Lhs lhs;
Rhs rhs;
f(lhs<<=rhs);
Если Ret=void
, то тип возврата проверяется точно на void
.
Руководитель:/has_left_shift_assign.hpp>boost/type_traits/9>has_operatorhpp
Совместимость с компилятором: Требуется работа SFINAE (т.е. BOOST_NO_SFINAE не установлен). Этого не поддерживает лишь меньшинство довольно старых компиляторов.
Примеры:
has_left_shift_assign<Lhs,Rhs,Ret>::value_type
является типом bool
.
has_left_shift_assign<Lhs,Rhs,Ret>::значение
представляет собой bool
интегральное постоянное выражение.
has_left_shift_assign<int>::значение
представляет собой bool
интегральное постоянное выражение, которое оценивает до true
.
has_left_shift_assign<long>
наследует от true_type
.
has_left_shift_assign<int, int, int>
наследует от true_type
.
has_left_shift_assign<const int, int>
наследует от false_type
.
has_left_shift_assign<int, double, bool>
наследует от false_type
.
has_left_shift_assign<int,int, std::string>
наследует от false_type
.
См. также: Типы операторов
Известные проблемы: