std::decay (3) - Linux Man Pages
Defined in header <type_traits>
template< class T > (since C++11)
Applies lvalue-to-rvalue, array-to-pointer, and function-to-pointer implicit conversions to the type T, removes cv-qualifiers, and defines the resulting type as the member typedef type. Formally:
* If T names the type "array of U" or "reference to array of U", the member typedef type is U*.
* Otherwise, if T is a function type F or a reference thereto, the member typedef type is std::add_pointer<F>::type.
* Otherwise, the member typedef type is std::remove_cv<std::remove_reference<T>::type>::type.
These conversions model the type conversion applied to all function arguments when passed by value.
type the result of applying the decay type conversions to T
template< class T > (since C++14)
using decay_t = typename decay<T>::type;
// Run this code
remove_cvref combines std::remove_cv and std::remove_reference
implicit_conversion array-to-pointer, function-to-pointer, lvalue-to-rvalue conversions