# std::remove_pointer

< cpp‎ | types

定义于头文件 `<type_traits>` |  |
template< class T > struct remove_pointer; |  | (C++11 起)

提供成员 typedef `type` ，其为 `T` 所指向的类型，或若 `T` 不是指针，则 `type` 与 `T` 相同。

添加 `remove_pointer` 的特化的程序行为未定义。

### 成员类型

名称 | 定义
`type` | `T` 所指向的类型，或若 `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 <iostream>
    #include <type_traits>

    template<class T1, class T2>
    void print_is_same()
    {
        std::cout << std::is_same<T1, T2>() << '\n';
    }

    void print_separator()
    {
        std::cout << "-----\n";
    }

    int main()
    {
        std::cout << std::boolalpha;

        print_is_same<int, int>();   // true
        print_is_same<int, int*>();  // false
        print_is_same<int, int**>(); // false

        print_separator();

        print_is_same<int, std::remove_pointer<int>::type>();   // true
        print_is_same<int, std::remove_pointer<int*>::type>();  // true
        print_is_same<int, std::remove_pointer<int**>::type>(); // false

        print_separator();

        print_is_same<int, std::remove_pointer<int* const>::type>();          // true
        print_is_same<int, std::remove_pointer<int* volatile>::type>();       // true
        print_is_same<int, std::remove_pointer<int* const volatile>::type>(); // true
    }

输出：

    true
    false
    false
    -----
    true
    true
    false
    -----
    true
    true
    true

### 参阅

is_pointer (C++11) | 检查类型是否为指针类型 (类模板)
add_pointer (C++11) | 对给定类型添加一层指针 (类模板)