◐ Shell
clean mode source ↗

std::remove_cvref — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

template< class T > struct remove_cvref;

(начиная с C++20)

Если тип T является ссылочным типом, предоставляет typedef элемент type, который является типом, на который ссылается T, с удалёнными cv-квалификаторами верхнего уровня. В противном случае type равно T с удалёнными cv-квалификаторами верхнего уровня.

Поведение программы, добавляющей специализации для std::remove_cvref не определено.

Типы элементы

Имя Определение
type тип, на который ссылается T или T, если он не является ссылкой, с удалёнными cv-квалификаторами верхнего уровня

Вспомогательные типы

<tbody> </tbody>

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

Смотрите также