我只是想知道标准是否已经提供了一个。我知道自己制作一个很容易
// for C++03, use <tr1/type_traits> and std::tr1
#include <type_traits>
template<class T>
struct remove_toplevel{
typedef typename std::remove_reference<T>::type noref_T;
typedef typename std::remove_cv<noref_T>::type noref_nocv_T;
typedef noref_nocv_T type;
};
但是我觉得我忘记了那里的东西或者订单错了,所以如果有一个准备好的话,那就好了。
我相信,std::decay
执行此功能。
我更喜欢将两种功能结合起来,因为它确切地描述了目的是什么:
C ++ 11 std::remove_cv<std::remove_reference<T>::type>::type
C ++ 14 std::remove_cv_t<std::remove_reference_t<T>>
C ++ 20 std::remove_cvref_t<T>