std::experimental::propagate_const<T>::propagate_const
来自cppreference.com
< 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 才为
此构造函数仅若 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> 不是
此构造函数仅若 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
说明符实现。