cpp/experimental/propagate const

is a const-propagating wrapper for pointers and pointer-like objects. It treats the wrapped pointer as a pointer to when accessed through a  access path, hence the name.

The class satisfies the requirements of and  if the underlying pointer-like type satisfies the corresponding requirement, but  is neither  nor.

Requirements on pointer-like class types
If is a class type, it must satisfy the requirements in this subsection.

Given
 * , a modifiable lvalue expression of type ,
 * , an lvalue of type that denotes the same object as  (equivalent to  since C++17),
 * , an object type.

The following expressions must be valid and have their specified effects:

Further, and  shall be contextually convertible to.

In addition, if is implicitly convertible to, then  shall be equal to. Similarly, if is implicitly convertible to, then  shall be equal to.