explicit
out_ptr_t(Smart& smart, Args... args); // (1) C++23
constexpr explicit
out_ptr_t(Smart& smart, Args... args); // (1) C++26
out_ptr_t(const out_ptr_t&) = delete; // (2) C++23
概要
- (1) :
out_ptr_tオブジェクトの構築。 - (2) : コピーコンストラクタ。コピー不可。
効果
(1) : out_ptr_tクラスの説明用メンバ変数s, a, pを下記の通り初期化する。
Smart&型メンバ変数s:smarttuple<Args...>型メンバ変数a:std::forward<Args>(args)...Pointer型メンバp:{}(値初期化)
その後、以下と等価の処理を行う。
- 式
s.reset()が適格であれば、s.reset() - そうでなく、
is_constructible_v<Smart> == trueであれば、s = Smart() - いずれでもなければ、プログラムは不適格となる
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??
関連項目
参照
- P1132R8 out_ptr - a scalable output pointer abstraction
- LWG Issue 3734. Inconsistency in
inout_ptrandout_ptrfor empty case- C++23で、
out_ptr_tのコンストラクタが、sが保持していた既存の値をs.reset()(不可能ならs = Smart())で解放するよう変更された。これにより、ポインタスタイル関数がnullptrを返した場合でもoutが空状態になる
- C++23で、
- P3037R6
constexpr std::shared_ptrand friends