最終更新日時: 2025年10月10日 13時00分13秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<atomic>

# std::atomic_fetch_min_explicit(C++26)

    namespace std {
      template <class T>
      T
        atomic_fetch_min_explicit(
          volatile atomic<T>* object,
          typename atomic<T>::value_type operand,
          memory_order order) noexcept;                // (1) C++26

      template <class T>
      constexpr T
        atomic_fetch_min_explicit(
          atomic<T>* object,
          typename atomic<T>::value_type operand,
          memory_order order) noexcept;                // (2) C++26
    }

## 概要

アトミックに最小値を取得する

## テンプレートパラメータ制約

- (1), (2) : 型`T`がオブジェクト型であること。型`T`が`void*`や関数ポインタであってはならない
- (1) : `atomic<T>::is_always_lock_free`が`true`であること

## 効果

`order`で指定されたメモリオーダーにしたがって、`std::min()`アルゴリズムのように`*object`が保持する値と`operand`の最小値を求め、アトミックにその値で置き換えて返す

## 例外

投げない

## 例

    #include <iostream>
    #include <atomic>

    int main()
    {
      std::atomic<int> x(3);

      int ret = std::atomic_fetch_min_explicit(&x, 2, std::memory_order_seq_cst);
      std::cout << ret << std::endl;
    }

### 出力

    2

## バージョン

### 言語

- C++26

### 処理系

- Clang: 19 ❌
- GCC: 14 ❌

## 参照

- P0493R5 Atomic minimum/maximum
- P3309R3 `constexpr atomic` and `atomic_ref`