# std::unique_ptr<T,Deleter>::operator<<

From cppreference.com
< cpp‎ | memory‎ | unique ptr

template <class CharT, class Traits, class Y, class D> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const std::unique_ptr<Y, D>& p); |  | (since C++20)

Inserts the value of the pointer managed by `p` into the output stream `os`.

Equivalent to `os << p.get()`.

This overload only participates in overload resolution if os << p.get() is a valid expression.

### Parameters

os | - | a std::basic_ostream to insert `p` into
p | - | the pointer to be inserted into `os`

### Return value

`os`

### Notes

If std::unique_ptr<Y, D>::pointer is a pointer to a character type (e.g., when `Y` is char or char[] or CharT), this may end up calling the overloads of `operator<<` for null-terminated character strings (causing undefined behavior if the pointer does not in fact point to such a string), rather than the overload for printing the value of the pointer itself.

### Example

Run this code

    #include <iostream>
    #include <memory>

    class Foo {};

    int main()
    {
        auto p = std::make_unique<Foo>();
        std::cout << p << '\n';
        std::cout << p.get() << '\n';
    }

Possible output:

    0x6d9028
    0x6d9028

### See also

get | returns a pointer to the managed object (public member function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/unique_ptr/operator_ltlt&oldid=105354"