- execution[meta header]
- concept[meta id-type]
- std::execution[meta namespace]
- cpp26[meta cpp]
namespace std::execution {
template <class Assoc>
concept scope_association =
movable<Assoc> &&
is_nothrow_move_constructible_v<Assoc> &&
is_nothrow_move_assignable_v<Assoc> &&
default_initializable<Assoc> &&
requires(const Assoc assoc) {
{ static_cast<bool>(assoc) } noexcept;
{ assoc.try_associate() } -> same_as<Assoc>;
};
}- movable[link /reference/concepts/movable.md]
- is_nothrow_move_constructible_v[link /reference/type_traits/is_nothrow_move_constructible.md]
- is_nothrow_move_assignable_v[link /reference/type_traits/is_nothrow_move_assignable.md]
scope_associationコンセプトは、型Assocに対する要件を定義する。関連スコープ(associated scope)と呼ばれる非同期スコープとの関連付けを所有するときに限って、Assoc型のオブジェクトは有効(engaged)である。
型Assocは、次のときscope_associationのモデルとなる。
- デフォルト構築された
Assoc型オブジェクトは有効でない(not engaged)。 Assoc型のオブジェクトassocに対して、static_cast<bool>(assoc)がtrueのときに限ってassocは有効(engaged)である。- 同一の関連付けを所有する
Assoc型の2つのオブジェクトは存在しない。 Assoc型のオブジェクトassocに対して、assocの破棄は(もしあれば)assocにより所有される関連付けを解放する。Assoc型のオブジェクトassocに対して、ムーブ構築のソースオペランドとして使われた後、assocは有効でない(not engaged)。Assoc型の異なるオブジェクトassoc1とassoc2に対して、assoc1 = std::move(assoc2)を評価した後、(もしあれば)assoc1により所有される関連付けは解放され、assoc2は有効でない(not engaged)。Assoc型の有効な(engaged)オブジェクトassocに対して、assoc.try_associate()は有効でない(not engaged)オブジェクト、もしくはassocの関連スコープとの新しい関連付けを取得して関連付けを所有する有効な(engaged)オブジェクトのいずれかを返す。Assoc型の有効でない(not engaged)オブジェクトassocに対して、assoc.try_associate()は有効でない(not engaged)オブジェクトを返す。
- C++26
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??