PropagateConst wraps a pointer-type and allows only const access to the pointee when the pointer is accessed through a const-access path. PropagateConst is useful when writing const-correct component-based classes.
PropagateConst is part of Library Fundamentals Technical Specification 2 and has been implemented in libcxx and libstdcxx. The implementation in this patch is based on my implementation from libcxx.
experiemental -> experimental