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