We recommend using Visual Studio 2017

decay Class


The latest version of this topic can be found at decay Class.

Produces the type as passed by value. Makes the type non-reference, non-const, non-volatile, or makes a pointer to the type from a function or an array type.

template <class T>
struct decay;

template <class T>  
using decay_t = typename decay<T>::type;


The type to modify.

Use the decay template to produce the resulting type as if the type was passed by value as an argument. The template class member typedef type holds a modified type that is defined in the following stages:

  • The type U is defined as remove_reference<T>::type.

  • If is_array<U>::value is true, the modified type type is remove_extent<U>::type *.

  • Otherwise, if is_function<U>::value is true, the modified type type is add_pointer<U>::type.

  • Otherwise, the modified type type is remove_cv<U>::type.

Header: <type_traits>

Namespace: std