Skip to content

Latest commit

 

History

History
59 lines (47 loc) · 3 KB

File metadata and controls

59 lines (47 loc) · 3 KB

scope_association

  • 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型の異なるオブジェクトassoc1assoc2に対して、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

処理系

関連項目

参照