[#BloombergLP-bslmf-MovableRefUtil-Decay] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bslmf.adoc[bslmf]::xref:BloombergLP/bslmf/MovableRefUtil.adoc[MovableRefUtil]::Decay :relfileprefix: ../../../ :mrdocs: This `struct` template provides a metafunction that defines a nested `type` typedef that applies lvalue‐to‐rvalue, array‐to‐pointer, and function‐to‐pointer conversions that occur when an lvalue of type `t_TYPE` is used as an rvalue, and also removes `const`, `volatile`, and reference qualifiers from class types in order to model by‐value argument passing. For the purpose of this type trait, `MovableRef<T>` is considered a (movable) reference‐qualified `T`. == Synopsis Declared in `<bslmf_movableref.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template<class t_TYPE> struct Decay : xref:BloombergLP/bslmf/MovableRefUtil_Decay.adoc[MovableRefUtil_Decay<t_TYPE>] ---- == Description Formally, let `U` be `MovableRefUtil::RemoveReference<t_TYPE>::type`. If `bsl::is_array<U>::value` is true, the member typedef `type` is `bsl::remove_extent<U>::type *`. If `bsl::is_function<U>::value` is true, the member typedef `type` is `bsl::add_pointer<U>::type`. Otherwise, the member typedef `type` is `bsl::remove_cv<U>::type`. == Base Classes [cols="1,4"] |=== | Name| Description | `xref:BloombergLP/bslmf/MovableRefUtil_Decay.adoc[MovableRefUtil_Decay<t_TYPE>]` | forward declaration |=== == Type Aliases [cols="1,4"] |=== | Name| Description | xref:bsl/decay/type.adoc[`type`] | This `typedef` is an alias to the decayed form of `t_TYPE`. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#