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.
См. также: Типы операторов
Известные проблемы: