We already supported this feature as std::__invoke, for internal use. This just adds a public version of it to . Internal uses should continue to include and use std::__invoke so that they don't need to include all of . Signed-off-by: Jonathan Wakely libstdc++-v3/ChangeLog: * include/std/functional (invoke_r): Define. * include/std/version (__cpp_lib_invoke_r): Define. * testsuite/20_util/function_objects/invoke/version.cc: Check for __cpp_lib_invoke_r as well as __cpp_lib_invoke. * testsuite/20_util/function_objects/invoke/4.cc: New test. Tested x86_64-linux. Committed to trunk.