std::experimental::observer_ptr
From cppreference.com
                    
                                        
                    < cpp | experimental
                    
                                                            
                    |   Defined in header  <experimental/memory>
  | 
||
|   template< class W > class observer_ptr;  | 
(library fundamentals TS v2) | |
std::experimental::observer_ptr is a non-owning pointer, or observer. The observer stores a pointer to a second object, known as the watched object.  An observer_ptr may also have no watched object. 
An observer is not responsible in any way for the watched object; there is no inherent relationship between an observer and the object it watches.
It is intended as a near drop-in replacement for raw pointer types, with the advantage that, as a vocabulary type, it indicates its intended use without need for detailed analysis by code readers.
Specializations of observer_ptr satisfy the requirements of CopyConstructible and CopyAssignable.
| Type requirements | ||
 -W shall not be a reference type, but may be an incomplete type.
 | 
Member types
| Member type | Definition | 
| element_type |   W, the type of the object watched by this observer_ptr
 | 
Member functions
  constructs a new observer_ptr (public member function)  | |
|    (destructor) (implicitly declared)  | 
  destructs an observer_ptr (public member function)  | 
|    operator= (implicitly declared)  | 
   implicitly declared copy and move assignment operators that assign the stored pointer   (public member function)  | 
 Modifiers | |
|    returns a pointer to the watched object and stops watching the object   (public member function)  | |
|    replaces the watched object   (public member function)  | |
|    swaps the watched objects   (public member function)  | |
 Observers | |
|    returns a pointer to the watched object   (public member function)  | |
|    checks if there is an associated watched object   (public member function)  | |
|    dereferences pointer to the watched object   (public member function)  | |
 Conversions | |
|    explicit conversion function to the stored pointer   (public member function)  | |
Non-member functions
   creates a observer_ptr that watches an object (function template)  | |
   compares to another observer_ptr or with nullptr  (function template)  | |
   specializes the swap algorithm (function template)  | 
Helper classes
   hash support for observer_ptr  (class template specialization)  | 
Example
| This section is incomplete Reason: no example  |