std::unique_ptr::operator*,std::unique_ptr::operator->(3)

NAME
std::unique_ptr::operator*,std::unique_ptr::operator-> - std::unique_ptr::operator*,std::unique_ptr::operator->

Synopsis
   typename std::add_lvalue_reference<T>::type operator*() const (since C++11)
       noexcept(noexcept(*std::declval<pointer>())); (1) (constexpr since
                        C++23)
                        (since C++11)
   pointer operator->() const noexcept; (2) (constexpr since
                        C++23)
   operator* and operator-> provide access to the object owned by *this.
   The behavior is undefined if get() == nullptr.
   These member functions are only provided for unique_ptr for the single objects i.e.
   the primary template.

Parameters
   (none)

Return value
   1) Returns the object owned by *this, equivalent to *get().
   2) Returns a pointer to the object owned by *this, i.e. get().

Exceptions
   1) May throw if pointer has a throwing operator*.

Notes
   The use of std::add_lvalue_reference is to make it possible to instantiate
   std::unique_ptr<void> since void& isn't allowed in C++ while
   std::add_lvalue_reference<void> produces void. See LWG673 for details.

Example
// Run this code
 #include <iostream>
 #include <memory>
 struct Foo
 {
     void bar() { std::cout << "Foo::bar\n"; }
 };
 void f(const Foo&)
 {
     std::cout << "f(const Foo&)\n";
 }
 int main()
 {
     std::unique_ptr<Foo> ptr(new Foo);
     ptr->bar();
     f(*ptr);
 }

Output:
 Foo::bar
 f(const Foo&)
   Defect reports
   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.
      DR Applied to Behavior as published Correct behavior
                       operator* might be potentially-throwing a conditional exception
   LWG 2762 C++11 even if specification added
                       *get() was noexcept

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