- functional[meta header]
- function template[meta id-type]
- std[meta namespace]
- cpp23[meta cpp]
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...>);
}
- is_nothrow_invocable_r_v[link /reference/type_traits/is_nothrow_invocable_r.md]
関数呼び出し可能なオブジェクト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;
}
- std::invoke_r[color ff0000]
C
- C++23
- Clang: ??
- GCC: ??
- Visual C++: ??