| 
| 
constexpr  | propagate_const ()=default | 
|   | Creates object pointing to nullptr
  | 
|   | 
| 
  | propagate_const (const propagate_const &other)=delete | 
|   | Copy constructor
  | 
|   | 
| 
constexpr  | propagate_const (propagate_const &&other) noexcept=default | 
|   | Move constructor
  | 
|   | 
| 
template<class U , class  = std::enable_if_t < std::is_constructible_v < T, U && >>>  | 
| constexpr  | propagate_const (propagate_const< U > &&other) | 
|   | Construct from a propagate_const object of compatible type
  | 
|   | 
| template<class U , class  = std::enable_if_t < std::is_constructible_v < T, U && > && !is_propagate_const<std::decay_t<U>>::value >>  | 
| constexpr  | propagate_const (U &&other) | 
|   | Construct from an object of compatible type More...
  | 
|   | 
| 
propagate_const &  | operator= (const propagate_const &other)=delete | 
|   | Copy assignment operator
  | 
|   | 
| 
propagate_const &  | operator= (propagate_const &&other) noexcept=default | 
|   | Move assignment operator
  | 
|   | 
| 
template<class U , class  = std::enable_if_t<std::is_convertible_v<U, T>>>  | 
| propagate_const &  | operator= (propagate_const< U > &&other) | 
|   | Move assign from a propagate_const object of compatible type
  | 
|   | 
| template<class U , class  = std::enable_if_t < std::is_convertible_v<U, T>&& !is_propagate_const<std::decay_t<U>>::value >>  | 
| propagate_const &  | operator= (U &&other) | 
|   | Assignment from an object of compatible type More...
  | 
|   | 
| void  | swap (propagate_const &other) noexcept | 
|   | Swaps the contents of this and other More...
  | 
|   | 
| 
element_type *  | get () | 
|   | Returns a raw pointer to the pointee
  | 
|   | 
| 
const element_type *  | get () const | 
|   | Returns a const raw pointer to the pointee
  | 
|   | 
| 
  | operator bool () const | 
|   | Checks whether the pointee is not equal to nullptr
  | 
|   | 
| 
element_type &  | operator* () | 
|   | Returns a reference to the pointee
  | 
|   | 
| 
const element_type &  | operator* () const | 
|   | Returns a const reference to the pointee
  | 
|   | 
| 
element_type *  | operator-> () | 
|   | Returns a raw pointer to the pointee
  | 
|   | 
| 
const element_type *  | operator-> () const | 
|   | Returns a const raw pointer to the pointee
  | 
|   | 
| template<class T_  = T, class U  = std::enable_if_t<std::is_convertible_v<const T_, const element_type*>>>  | 
|   | operator element_type * () | 
|   | Implicit conversion to the element type More...
  | 
|   | 
| template<class T_  = T, class U  = std::enable_if_t<std::is_convertible_v<const T_, const element_type*>>>  | 
|   | operator const element_type * () const | 
|   | Implicit conversion to the element type More...
  | 
|   | 
 | 
| 
constexpr bool  | operator== (const propagate_const &lhs, std::nullptr_t) | 
|   | Equality comparison with nullptr
  | 
|   | 
| 
constexpr bool  | operator== (std::nullptr_t, const propagate_const &rhs) | 
|   | Equality comparison with nullptr
  | 
|   | 
| 
constexpr bool  | operator!= (const propagate_const &lhs, std::nullptr_t) | 
|   | Equality comparison with nullptr
  | 
|   | 
| 
constexpr bool  | operator!= (std::nullptr_t, const propagate_const &rhs) | 
|   | Equality comparison with nullptr
  | 
|   | 
| 
template<class U >  | 
| constexpr bool  | operator== (const propagate_const &lhs, const propagate_const< U > &rhs) | 
|   | Equality comparison with other propagate_const object
  | 
|   | 
| 
template<class U >  | 
| constexpr bool  | operator!= (const propagate_const &lhs, const propagate_const< U > &rhs) | 
|   | Equality comparison with other propagate_const object
  | 
|   | 
| 
template<class U >  | 
| constexpr bool  | operator== (const propagate_const &lhs, const U &rhs) | 
|   | Equality comparison with underlying object type
  | 
|   | 
| 
template<class U >  | 
| constexpr bool  | operator!= (const propagate_const &lhs, const U &rhs) | 
|   | Equality comparison with underlying object type
  | 
|   | 
| 
template<class U >  | 
| constexpr bool  | operator== (const U &lhs, const propagate_const &rhs) | 
|   | Equality comparison with underlying object type
  | 
|   | 
| 
template<class U >  | 
| constexpr bool  | operator!= (const U &lhs, const propagate_const &rhs) | 
|   | Equality comparison with underlying object type
  | 
|   | 
template<class T>
class Arp::Base::Core::propagate_const< T >
Encapsulates a (smart) pointer to ensure const-correctness even on pointer.
Usually smart pointers behave like raw pointers. When embedding them in a class it is possible to call non-const members of the pointee from const members of the surrounding class. By wrapping a pointer or smart pointer in propagate_const const-correctness can be ensured with almost no overhead. 
- Template Parameters
 - 
  
    | T | The type to propagate const for. The type T shall either be a raw pointer or a smart pointer providing the get() operation.  |