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 { typedef std::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<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) |
применяет преобразования типов, как при передаче аргумента функции по значению (шаблон класса) |