This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
At the WG21 meeting last week we approved P0604R0 which replaces the error-prone result_of<F(Args...)> and is_callable<F(Args...) R> APIs with invoke_result<F, Args...> and is_invocable<F, Args...> and is_invocable_r<R, F, Args...>. Only result_of exists in previous standards, the rest are new for C++17. This patch replaces the is_callable family with the new is_invocable ones, replaces our internal __is_callable with __is_invocable (so it can be used in C++11 mode) and also adds __invoke_result. Most of the patch changes C++17 stuff and tests. The parts that affect C++11 and C++14 are mostly trivial. The new invoke_result trait revealed that there were no partial specializations of __result_of_memobj and __result_of_memfun for const reference_wrapper prvalues. Rather than add them I realised we already use __inv_unwrap elsewhere, and doing so here makes the partial specializations unnecessary. * include/bits/invoke.h (__invoke): Use __invoke_result instead of result_of, and __is_nothrow_invocable instead of __is_nothrow_callable. * include/bits/shared_ptr_base.h (__shared_ptr): Use __is_invocable instead of __is_callable. * include/std/functional (invoke): use invoke_result_t instead of result_of_t and is_nothrow_invocable instead of is_nothrow_callable. (_Not_fn): Use __invoke_result instead of result_of. * include/std/type_traits (__result_of_memobj, __result_of_memfun): Remove partial specializations for reference_wrapper types. (__result_of_impl): Use __inv_unwrap to strip reference_wrapper. (__invoke_result): Define replacement for result_of and then use it to define result_of. (__is_callable_impl, __is_callable, __is_nothrow_callable): Replace with __is_invocable_impl, __is_invocable, and __is_nothrow_invocable respectively. (invoke_result, invoke_result_t): Define for C++17. (is_callable, is_nothrow_callable): Replace with is_invocable, is_invocable_r, is_nothrow_invocable, and is_nothrow_invocable_r. (is_callable_v, is_nothrow_callable_v): Replace with is_invocable_v, is_invocable_r_v, is_nothrow_invocable_v, and is_nothrow_invocable_r_v. * include/std/variant (hash<variant<T...>>): Use is_nothrow_invocable_v instead of is_nothrow_callable_v. * testsuite/20_util/function_objects/invoke/59768.cc: Remove unused main function. * testsuite/20_util/function_objects/not_fn/1.cc: Use is_invocable instead of is_callable. * testsuite/20_util/is_callable/*: Rename directory and adjust tests to use new traits. * testsuite/20_util/is_notjrow_callable/*: Likewise. * testsuite/20_util/optional/hash.cc: Use is_invocable_v instead of is_callable. * testsuite/20_util/variant/hash.cc: Likewise. Tested powerpc64le-linux, I plan to commit this to trunk tomorrow.
Attachment:
patch.txt
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |