- memory[meta header]
- std[meta namespace]
- out_ptr_t[meta class]
- function[meta id-type]
- cpp23[meta cpp]
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