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

< cpp‎ | experimental‎ | propagate const

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>::value 为 true 才参与重载决议，若且唯若 std::is_convertible<U, T>::value 为 false 才为 `explicit` 。
4) 如同以直接非列表初始化，用表达式 std::forward<U>(u) 初始化 this->t_ 。
此构造函数仅若 std::is_constructible<T, U>::value 为 true 而 std::decay_t<U> 不是 `propagate_const` 的特化才参与重载决议。此构造函数若且唯若 std::is_convertible<U, T>::value 为 false 才为 `explicit` 。
5) 复制构造函数被显式删除。 `propagate_const` 不可复制。

### 参数

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

### 注解

在库基础 TS v2 （基于 C++14 ）中， (4) 与 (5) 常以 `explicit`/非 `explicit` 重载对实现。从库基础 TS v3 （基于 C++20 ）起，它们能以条件性 `explicit` 说明符实现。