Есть ли тип-черта, чтобы удалить cv верхнего уровня и ссылку сразу? - PullRequest
14 голосов
/ 06 июня 2011

Я просто хочу знать, есть ли уже один, предусмотренный стандартом.Я знаю, что это легко сделать самостоятельно

// 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 ]

19 голосов
/ 06 июня 2011

std::decay, я полагаю, выполняет эту функцию.

5 голосов
/ 19 декабря 2017

Я предпочитаю объединить две функции, так как она точно описывает намерение:

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>

...