std::experimental::propagate_const<T>::propagate_const

来自cppreference.com
constexpr propagate_const() = default;
(1) (库基础 TS v2)
constexpr propagate_const( propagate_const&& p ) = default;
(2) (库基础 TS v2)
template<class U>
/* see below */ constexpr propagate_const( propagate_const<U>&& pu );
(3) (库基础 TS v2)
template<class U>
/* see below */ constexpr propagate_const( U&& u );
(4) (库基础 TS v2)
propagate_const( const propagate_const& ) = delete;
(5) (库基础 TS v2)

t_ 指代私有数据成员,即被包装的仿指针对象。

1) 构造 propagate_const ,默认初始化 this->t_

2) 显式默认化的移动构造函数,从 p.t_ 移动构造 this->t_

3) 如同以直接非列表初始化,从表达式 std::move(pu.t_) 初始化 this->t_

此构造函数仅若 std::is_constructible<T, U&&>::valuetrue 才参与重载决议,若且唯若 std::is_convertible<U&&, T>::valuefalse 才为 explicit

4) 如同以直接非列表初始化,用表达式 std::forward<U>(u) 初始化 this->t_

此构造函数仅若 std::is_constructible<T, U&&>::valuetruestd::decay_t<U> 不是 propagate_const 的特化才参与重载决议。此构造函数若且唯若 std::is_convertible<U&&, T>::valuefalse 才为 explicit

5) 复制构造函数被显式删除。

参数

p - 要移动的另一 propagate_const 对象
pu - 要移动的另一不同特化的 propagate_const 对象
u - 用来初始化所含指针的另一对象