Ответ 1
std::decay
, я считаю, выполняет эту функцию.
Я просто хочу знать, есть ли уже один стандарт. Я знаю, что легко сделать это сами.
// 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
, я считаю, выполняет эту функцию.
Я предпочитаю комбинировать две функции, так как он точно описывает, что такое намерение:
С++ 11 std::remove_cv<std::remove_reference<T>::type>::type
С++ 14 std::remove_cv_t<std::remove_reference_t<T>>
С++ 20 std::remove_cvref_t<T>