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

来自cppreference.com
 
 
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
 
 
 
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) 复制构造函数被显式删除。 propagate_const 不可复制。

参数

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

注解

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