Namespaces
Variants

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

From cppreference.net
constexpr propagate_const ( ) = default ;
(1) (ライブラリ基盤仕様 TS v2)
constexpr propagate_const ( propagate_const && p ) = default ;
(2) (ライブラリ基盤仕様 TS v2)
template < class U >
/* 詳細は後述 */ constexpr propagate_const ( propagate_const < U > && pu ) ;
(3) (ライブラリ基盤仕様 TS v2)
template < class U >
/* 詳細は後述 */ constexpr propagate_const ( U && u ) ;
(4) (ライブラリ基盤仕様 TS v2)
propagate_const ( const propagate_const & ) = delete ;
(5) (ライブラリ基盤仕様 TS v2)

Let t_ が、ラップされたポインタライクなオブジェクトであるプライベートデータメンバを指すものとします。

1) propagate_const を構築し、 this - > t_ をデフォルト初期化します。
2) 明示的にデフォルト化されたムーブコンストラクタで、 this - > t_ p. t_ からムーブ構築する。
3) this - > t_ std :: move ( pu. t_ ) 式からの直接非リスト初期化によって初期化する。
このコンストラクタは、 std:: is_constructible < T, U > :: value true でない場合、オーバーロード解決に参加せず、 std:: is_convertible < U, T > :: value false の場合に限り explicit となる。
4) this->t_ this - > t_ 式による直接非リスト初期化によって初期化する。
このコンストラクタは、 std:: forward < U > ( 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 - 包含ポインタの初期化に使用する別のオブジェクト

注記

Library Fundamental TS v2(C++14ベース)では、 (4) および (5) は通常、 explicit /非 explicit オーバーロードペアで実装されます。Library Fundamental TS v3(C++20ベース)以降では、条件付き explicit 指定子で実装可能です。