# std::remove_pointer

From cppreference.com
< cpp‎ | types

Defined in header `<type_traits>` |  |
template< class T > struct remove_pointer; |  | (since C++11)

Provides the member typedef `type` which is the type pointed to by `T`, or, if `T` is not a pointer, then `type` is the same as `T`.

### Member types

Name | Definition
`type` | the type pointed to by `T` or `T` if it's not a pointer

### Helper types

template< class T > using remove_pointer_t = typename remove_pointer<T>::type; |  | (since C++14)

### Possible implementation

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

### Example

Run this code

    #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
    }

Output:

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

### See also

is_pointer (C++11) | checks if a type is a pointer type (class template)
add_pointer (C++11) | adds a pointer to the given type (class template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/types/remove_pointer&oldid=65058"