最終更新日時: 2025年09月29日 02時08分59秒 (JST)
Raclamusi が更新

履歴 編集

function template
<functional>

# std::invoke_r(C++23)

    namespace std {
      template <class R, class F, class... Args>
      constexpr R invoke_r(F&& f, Args&&... args)
        noexcept(is_nothrow_invocable_r_v<R, F, Args...>);
    }

## 概要

関数呼び出し可能なオブジェクト`f`とその引数`args...`の組み合わせでINVOKE要件に従った関数呼び出しを行う。 `R`が（CV修飾された）`void`でなければ、戻り値は`R`型へ暗黙変換される。

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

`is_invocable_r_v<R, F, Args...>`が`true`

## 戻り値

`INVOKE<R>(std::forward<F>(f), std::forward<Args>(args)...)`

## 例

    #include <iostream>
    #include <functional>

    // ASCIIコード 0x43 == 'C'
    int ch() { return 0x43; }

    int main()
    {
      std::cout << std::invoke_r<char>(ch) << std::endl;
    }

### 出力例

    C

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 関連項目

- `invoke`
- `is_invocable_r`
- `is_nothrow_invocable_r`

## 参照

- P2136R3 `invoke_r`