Пространства имён
Варианты
Действия

std::remove_cvref

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
remove_cvref
(C++20)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <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_cvref201711L(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)>);}

[править]Смотрите также

удаляет спецификаторы const и/или volatile из данного типа
(шаблон класса)[править]
удаляет ссылку из данного типа
(шаблон класса)[править]
(C++11)
применяет преобразования типов, как при передаче аргумента функции по значению
(шаблон класса)[править]
close