std::unique_ptr::operator<<(3)

NAME
std::unique_ptr::operator<< - std::unique_ptr::operator<<

Synopsis
   template< class CharT, class Traits, class Y, class D >
   std::basic_ostream<CharT, Traits>& operator<<( (since C++20)
   std::basic_ostream<CharT, Traits>& os,
   const std::unique_ptr<Y, D>& p );
   Inserts the value of the pointer managed by p into the output stream os.
   Equivalent to os << p.get().
   This overload participates in overload resolution only 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)