cpp/experimental/propagate const/propagate const

Let designate the private data member that is the wrapped pointer-like object.

@1@ Constructs an, default-initializing.

@2@ Explicitly defaulted move constructor that move constructs from.

@3@ Initializes as if by direct-non-list-initialization from the expression. This constructor does not participate in overload resolution unless is, and is  if and only if  is.

@4@ Initializes as if by direct-non-list-initialization with the expression. This constructor does not participate in overload resolution unless is  and  is not a specialization of. This constructor is if and only if  is.

@5@ Copy constructor is explicitly deleted. is non-copyable.