An implementation of std::experimental::propagate_const from Library Fundamentals Technical Specification v2.
Tests are provided for specified behaviour (including non-compiling code by checking type_traits).
No tests are provided for disallowed types like fancy pointers or function pointers as no code was written to handle these.