std::remove_cvref
Определён в заголовочном файле <type_traits> | ||
|---|---|---|
template< class T > struct remove_cvref; | (начиная с C++20) |
Если тип T является ссылочным типом, предоставляет псевдоним типа type, который является типом, на который ссылается T, с удалёнными cv-квалификаторами верхнего уровня. В противном случае type — это T с удалёнными cv-квалификаторами верхнего уровня.
Если программа добавляет специализации для std::remove_cvref, поведение не определено.
Типы-члены
| Имя | Описание |
|---|---|
type | тип, на который ссылается T, или сам T, если это не ссылка, с удалёнными cv-квалификаторами верхнего уровня |
Вспомогательные типы
template< class T > using remove_cvref_t = remove_cvref<T>::type; | (начиная с C++20) |
Возможная реализация
template<class T>
struct remove_cvref
{
using type = std::remove_cv_t<std::remove_reference_t<T>>;
};
|
Примечания
| Макрос проверки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_remove_cvref | 201711L | (C++20) |
std::remove_cvref |
Пример
#include <type_traits>
int main()
{
static_assert(std::is_same_v<std::remove_cvref_t<int>, int>);
static_assert(std::is_same_v<std::remove_cvref_t<int&>, int>);
static_assert(std::is_same_v<std::remove_cvref_t<int&&>, int>);
static_assert(std::is_same_v<std::remove_cvref_t<const int&>, int>);
static_assert(std::is_same_v<std::remove_cvref_t<const int[2]>, int[2]>);
static_assert(std::is_same_v<std::remove_cvref_t<const int(&)[2]>, int[2]>);
static_assert(std::is_same_v<std::remove_cvref_t<int(int)>, int(int)>);
}
См. также
|
(C++11)(C++11)(C++11) | удаляет квалификаторы const и/или volatile из заданного типа (шаблон класса) |
|
(C++11) | удаляет ссылку из заданного типа (шаблон класса) |
|
(C++11) | применяет преобразования типа, как при передаче аргумента функции по значению (шаблон класса) |
|
(C++26) | объединяет meta::remove_cv и meta::remove_reference (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/remove_cvref