Spec-Zone.ru › C++

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

См. также

remove_cvremove_constremove_volatile
(C++11)(C++11)(C++11)
удаляет квалификаторы const и/или volatile из заданного типа
(шаблон класса)
remove_reference
(C++11)
удаляет ссылку из заданного типа
(шаблон класса)
decay
(C++11)
применяет преобразования типа, как при передаче аргумента функции по значению
(шаблон класса)
remove_cvref
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API