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 | ||
| - Wshall not be a reference type, but may be an incomplete type. | 
| Contents | 
[edit] Member types
| Member type | Definition | 
| element_type | W, the type of the object watched by thisobserver_ptr | 
[edit] 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) | |
[edit] Non-member functions
| creates a observer_ptrthat watches an object(function template) | |
| compares to another observer_ptror with nullptr(function template) | |
| specializes the swapalgorithm(function template) | 
[edit] Helper classes
| hash support for observer_ptr(class template specialization) | 
[edit] Example
| This section is incomplete Reason: no example | 


