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