Apply implicit conversions from lvalue-to-rvalue, array-to-pointer, and function-to-pointer to type T. The conversion will remove the cv qualifiers (const and volatile) of type T and define the result type as decay< T >::type. This conversion is very similar to the conversion that occurs when function parameters are passed by value. There are several situations:
If T is the type of "array of U" or "reference to array of U", then decay< T >::type is U*.
If T is a function type F or a reference to it, then decay< T >::type is std::add_pointer< F >::type.
否则,decay< T >::type 为 std::remove_cv<std::remove_reference< T >::type>::type。