std::remove_cvref
Материал из cppreference.com
Определено в заголовочном файле <type_traits> | ||
template<class T > struct remove_cvref; | (начиная с C++20) | |
Если тип T
является ссылочным типом, предоставляет typedef элемент type
, который является типом, на который ссылается T
, с удалёнными cv-квалификаторами верхнего уровня. В противном случае type
равно T
с удалёнными cv-квалификаторами верхнего уровня.
Поведение программы, добавляющей специализации для std::remove_cvref
не определено.
Содержание |
[править]Типы элементы
Имя | Определение |
type | тип, на который ссылается T или T , если он не является ссылкой, с удалёнными cv-квалификаторами верхнего уровня |
[править]Вспомогательные типы
template<class T > using remove_cvref_t =typename remove_cvref<T>::type; | (начиная с C++20) | |
[править]Возможная реализация
template<class T >struct remove_cvref {typedefstd::remove_cv_t<std::remove_reference_t<T>> type;}; |
[править]Примечание
Макрос Тестирования функциональности | Значение | Стандарт | Функциональность |
---|---|---|---|
__cpp_lib_remove_cvref | 201711L | (C++20) | std::remove_cvref |
[править]Example
Запустить этот код
#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<constint&>, int>); static_assert(std::is_same_v<std::remove_cvref_t<constint[2]>, int[2]>); static_assert(std::is_same_v<std::remove_cvref_t<constint(&)[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) | применяет преобразования типов, как при передаче аргумента функции по значению (шаблон класса) |