std::remove_pointer
Определено в заголовке <type_traits> | ||
|---|---|---|
template< class T > struct remove_pointer; | (с C++11) |
Обеспечивает член-typedef type, который является типом, на который указывает T, или, если T не является указателем, то type совпадает с T.
Поведение программы, которая добавляет специализации для std::remove_pointer является неопределенным.
Типы-члены
| Название | Определение |
|---|---|
type | тип, на который указывает T или T , если это не указатель |
Вспомогательные типы
template< class T > using remove_pointer_t = typename remove_pointer<T>::type; | (с C++14) |
Возможная реализация
template<class T> struct remove_pointer { typedef T type; };
template<class T> struct remove_pointer<T*> { typedef T type; };
template<class T> struct remove_pointer<T* const> { typedef T type; };
template<class T> struct remove_pointer<T* volatile> { typedef T type; };
template<class T> struct remove_pointer<T* const volatile> { typedef T type; }; |
Пример
#include <type_traits>
static_assert
(
std::is_same_v<int, int> == true &&
std::is_same_v<int, int*> == false &&
std::is_same_v<int, int**> == false &&
std::is_same_v<int, std::remove_pointer_t<int>> == true &&
std::is_same_v<int, std::remove_pointer_t<int*>> == true &&
std::is_same_v<int, std::remove_pointer_t<int**>> == false &&
std::is_same_v<int, std::remove_pointer_t<int* const>> == true &&
std::is_same_v<int, std::remove_pointer_t<int* volatile>> == true &&
std::is_same_v<int, std::remove_pointer_t<int* const volatile>> == true
);
int main() {}См. также
|
(C++11) | проверяет, является ли тип указателем (шаблон класса) |
|
(C++11) | добавляет указатель к заданному типу (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/remove_pointer