最終更新日時:
が更新

履歴 編集

function template
<utility>

std::constant_wrapper::operator()(C++26)

template <class... Args>
static constexpr decltype(auto) operator()(Args&&... args) noexcept(/*see below*/);

概要

constant_wrapperが保持する値を、関数として呼び出す。

戻り値

call-exprを以下のように定めたとき、call-exprを返す:

  • すべてのremove_cvref_t<Args>...constexpr-paramのモデルであり、かつconstant_wrapper<INVOKE(value, remove_cvref_t<Args>::value...)>が妥当な型である場合は、constant_wrapper<INVOKE(value, remove_cvref_t<Args>::value...)>{}
  • そうでない場合は、INVOKE(value, std::forward<Args>(args)...)

備考

  • 静的メンバ関数である。
  • 引数がすべてconstant_wrapperであり、その結果をふたたびconstant_wrapperで包める場合は、結果を包んで「型の世界」にとどめる。そうでない場合は、保持する値をアンラップして呼び出した結果をそのまま返す。
  • 例外指定はnoexcept(call-expr)と等価である。

#include <utility>

constexpr int triple(int x) { return x * 3; }

int main()
{
  // cw<triple>を呼び出すと、保持する関数を呼び出す
  // 引数もconstant_wrapperなら、結果をconstant_wrapperで包む
  auto r = std::cw<triple>(std::cw<7>);
  static_assert(r == 21);
}

出力


バージョン

言語

  • C++26

処理系

関連項目

参照