Assignable wrapper (C++20)
|
template
<
class
T
>
requires
std::
copy_constructible
<
T
>
&&
std::
is_object_v
<
T
>
|
(C++20以降)
(C++23まで) ( 説明専用* ) |
|
|
template
<
class
T
>
requires
std::
move_constructible
<
T
>
&&
std::
is_object_v
<
T
>
|
(C++23以降)
( 説明専用* ) |
|
ranges::single_view
,
ranges::repeat_view
,
(C++23以降)
および呼び出し可能オブジェクトを格納するレンジアダプタは、説明専用のクラステンプレート
copyable-box
(C++23以前)
movable-box
(C++23以降)
によって規定されます。ここに示す名前は説明目的のみのものです。
このラッパーは
std::
optional
<
T
>
と完全に同じように動作しますが、デフォルトコンストラクタ、コピー代入演算子、ムーブ代入演算子は(条件付きで)
std::optional
とは異なります。これにより、必要に応じて
T
に代入可能性が付与され、常に
copyable
または
movable
(C++23以降)
を満たすようになります。
|
|
(C++23まで) |
|
/*movable-box*/
<
T
>
は常に値を含むため、
|
(C++23以降) |
目次 |
テンプレートパラメータ
| T | - |
格納される値の型。オブジェクト型でなければならず、
copy_constructible
(C++23まで)
move_constructible
(C++23以降)
をモデル化する必要がある
|
メンバー関数
デフォルトコンストラクタ
|
constexpr
/*copyable-box*/
(
)
noexcept
(
std::
is_nothrow_default_constructible_v
<
T
>
)
requires
std::
default_initializable
<
T
>
|
(C++20以降)
(C++23以前) |
|
|
constexpr
/*movable-box*/
(
)
noexcept
(
std::
is_nothrow_default_constructible_v
<
T
>
)
requires
std::
default_initializable
<
T
>
|
(C++23以降) | |
デフォルトコンストラクタは、
T
が
default_initializable
コンセプトを満たす場合にのみ提供されます。
デフォルト構築されたラッパーは値初期化された
T
オブジェクトを含みます。
代入演算子
| (1) | ||
|
constexpr
/*copyable-box*/
&
operator
=
(
const
/*copyable-box*/
&
other
)
;
noexcept ( /* 下記参照 */ ) ; |
(C++20以降)
(C++23まで) |
|
|
constexpr
/*movable-box*/
&
operator
=
(
const
/*movable-box*/
&
other
)
;
noexcept ( /* 下記参照 */ ) requires std:: copy_constructible < T > ; |
(C++23以降) | |
| (2) | ||
|
constexpr
/*copyable-box*/
&
operator
=
(
/*copyable-box*/
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < T > ) ; |
(C++20以降)
(C++23まで) |
|
|
constexpr
/*movable-box*/
&
operator
=
(
/*movable-box*/
&&
other
)
noexcept ( std:: is_nothrow_move_constructible_v < T > ) ; |
(C++23以降) | |
|
constexpr
/*copyable-box*/
&
operator
=
(
const
/*copyable-box*/
&
other
)
|
(C++23まで) |
|
constexpr
/*movable-box*/
&
operator
=
(
const
/*movable-box*/
&
other
)
|
(C++23以降) |
std::optional
のコピー代入演算子
と同一である。
`, `
`, `
|
constexpr
/*copyable-box*/
&
operator
=
(
/*copyable-box*/
&&
other
)
|
(C++23まで) |
|
constexpr
/*movable-box*/
&
operator
=
(
/*movable-box*/
&&
other
)
|
(C++23以降) |
std::optional
のムーブ代入演算子
と同一である。
std::optionalと同一のメンバー
メンバー関数
optional
オブジェクトを構築する
(
std::optional<T>
の公開メンバー関数)
|
|
|
含まれている値がある場合、それを破棄する
(
std::optional<T>
の公開メンバー関数)
|
|
|
内容を代入する
(
std::optional<T>
の公開メンバー関数)
|
|
オブザーバー |
|
|
含まれている値にアクセスする
(
std::optional<T>
の公開メンバー関数)
|
|
|
オブジェクトが値を含んでいるかどうかをチェックする
(
std::optional<T>
の公開メンバー関数)
|
|
モディファイア |
|
|
含まれている値を破棄する
(
std::optional<T>
の公開メンバー関数)
|
|
|
含まれている値をその場で構築する
(
std::optional<T>
の公開メンバー関数)
|
|
注記
A
copyable-box
(until C++23)
movable-box
(since C++23)
は値を持たない場合にのみ
P2325R3以前は、標準ではこのラッパーは
semiregular-box
と呼ばれており、常に
semiregular
を満たしていました。なぜならデフォルトコンストラクタが常に提供されていたためです(これは値を持たないラッパーを構築する可能性があります)。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges
|
201911L
|
(C++20) | Rangesライブラリ および 制約付きアルゴリズム |
202106L
|
(C++20)
(DR) |
非 default-initializable ビュー | |
202207L
|
(C++23) | レンジアダプタ の緩和(move-only型を許可) |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P2325R3 | C++20 |
T
が
default_initializable
でない場合、デフォルトコンストラクタは
値を含まないラッパーを構築する |
ラッパーもまた
default_initializable
ではない
|
| LWG 3572 | C++20 | 条件付きで異なる代入演算子がconstexprではなかった | constexpr化された |
関連項目
指定された値の単一要素を含む
view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
|
同じ値を繰り返し生成して作成されるシーケンスからなる
view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
|
述語を満たす
range
の要素から構成される
view
(クラステンプレート) (レンジアダプタオブジェクト) |
|
各要素に変換関数を適用するシーケンスの
view
(クラステンプレート) (レンジアダプタオブジェクト) |
|
別の
view
の先頭要素から、述語が
false
を返す最初の要素までから構成される
view
(クラステンプレート) (レンジアダプタオブジェクト) |
|
別の
view
の要素から、述語が
false
を返す最初の要素までの初期部分シーケンスをスキップした
view
(クラステンプレート) (レンジアダプタオブジェクト) |
|
アダプトされたビューの対応する要素に変換関数を適用した結果から構成される
view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
|
アダプトされたビューの隣接する要素に変換関数を適用した結果から構成される
view
(クラステンプレート) (レンジアダプタオブジェクト) |