template <class Lhs, class Ret=dont_care>
struct has_post_decrement : public true_type-or-false_type {};
Наследники:Если (i)lhsтипаLhsможно использовать в выраженииlhs—и (ii)Ret=dont_careили результат выраженияlhs—конвертируется вRet, затем наследуется отtrue_type, в противном случае наследуется отfalse_type.
Поведение по умолчаниюRet=dont_care) заключается в том, чтобы не проверять обратное значение постфиксаоператора--. ЕслиRetотличается от типа по умолчаниюdont_care, обратное значение проверяется на конвертируемость вRet. Преобразуемый вRetозначает, что возвращаемое значение оператора может использоваться в качестве аргумента для функции, ожидающейRet:
void f(Ret);
Lhs lhs;
f(lhs--);
ЕслиRet=void, то тип возврата проверяется на то, чтобы быть точноvoid.
Заголовок:#включаетType_traits/имеет_post_decrement.hpp>#включает<#включаетType_traitsType_traits.hppType_traitsType_traits
Совместимость компилятора:Требуется работа SFINAE (т.е. BOOST_NO_SFINAE не установлен). Этого не поддерживает лишь меньшинство довольно старых компиляторов.
Примеры:
имеет_post_decrement<Lhs,Ret>::значение_typeявляется типомbool.
имеет_post_decrement<Lhs,Ret>::представляет собойболтинтегральное постоянное выражение.
имеет_post_decrement<int>::значениепредставляет собойболтинтегральное постоянное выражение, которое оценивает доистинно.
имеет_post_decrement<int,int>наследует отtrue_type.
имеет_post_decrement<int,long>наследует отtrue_type.
имеет_post_decrement<двойной,двойной>наследует отистинный_тип.
имеет_post_decrement<constint>наследует отfalse_type.
имеет_post_decrement<void*>наследует отfalse_type.
имеет_post_decrement<int,std::строка>наследует отfalse_type.
См. также:Типы операторов
Известные проблемы: