最終更新日時: 2023年10月31日 18時24分16秒 (JST)
yoh が更新

履歴 編集

function
<functional>

# std::copyable_function::operator()(C++26)

    R operator()(ArgTypes... args) /*cv*/ /*ref*/ noexcept(/*noex*/);

## 概要

関数を呼び出す。

`operator()`のCV修飾子 cv, 参照修飾子 ref, noexcept例外指定 noex は、`copyable_function`に指定するテンプレートパラメータ`R(ArgTypes...)`部のものと等しい。

説明用のプレースホルダ inv-quals を次のように定義する :

- ref が空（参照修飾無し）ならば、cv`&`
- そうでなければ、cv ref

## 事前条件

`*this`は関数ポインタまたは関数オブジェクトを保持していること。

## 効果

`*this`が保持している`F`型の関数ポインタまたは関数オブジェクト`f`に対して、`INVOKE<R>(static_cast<F /*inv-quals*/>(f), std::forward<ArgTypes>(args)...)`を行う。

## 戻り値

`R`型が`void`の場合は何も返さない。そうでなければ、関数呼び出しの戻り値を返す。

## 例

    #include <iostream>
    #include <functional>

    int ident(int x)
    { return x; }

    int main()
    {
      std::copyable_function<int(int)> f = ident;

      // 関数呼び出し : 保持しているident()関数を呼び出す
      int result = f(1);

      std::cout << result << std::endl;
    }

### 出力

    1

## バージョン

### 言語

- C++26

### 処理系

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

## 参照

- P2548R6 copyable_function