std::remove_pointer
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <type_traits>
|
||
template< class T > struct remove_pointer; |
(начиная с C++11) | |
Предоставляет typedef элемент type, который является типом, на который указывает T, или, если T не является указателем, тогда type является тем же, что и T.
Поведение программы, добавляющей специализации для std::remove_pointer не определено.
Типы-элементы
| Имя | Определение |
type
|
тип, на который указывает T, или T, если это не указатель
|
Вспомогательный тип
<tbody> </tbody> 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) |
добавляет указатель в данный тип (шаблон класса) |