是否有类型特征立即删除顶级cv和引用?

时间:2011-06-05 22:26:33

标签: c++ c++11 typetraits

我只是想知道标准是否已经提供了一个。我知道自己制作一个很容易

// 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;
};

但是我觉得我忘了里面的东西或者订单错了,所以如果有一个准备好的话,那就好了。

2 个答案:

答案 0 :(得分:19)

我相信

std::decay可以执行此功能。

答案 1 :(得分:5)

我更喜欢将两种功能结合起来,因为它准确描述了目的:

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>