diff --git a/absl/meta/type_traits.h b/absl/meta/type_traits.h index 75689bb6..d5cb5f3b 100644 --- a/absl/meta/type_traits.h +++ b/absl/meta/type_traits.h @@ -610,8 +610,22 @@ using common_type_t = typename std::common_type::type; template using underlying_type_t = typename std::underlying_type::type; -template -using result_of_t = typename std::result_of::type; + +namespace type_traits_internal { + +#if __cplusplus >= 201703L +// std::result_of is deprecated (C++17) or removed (C++20) +template struct result_of; +template +struct result_of : std::invoke_result {}; +#else +template using result_of = std::result_of; +#endif + +} // namespace type_traits_internal + +template +using result_of_t = typename type_traits_internal::result_of::type; namespace type_traits_internal { // In MSVC we can't probe std::hash or stdext::hash because it triggers a