diff --git a/AK/StdLibExtraDetails.h b/AK/StdLibExtraDetails.h index 15a3df47ce..dc479082d2 100644 --- a/AK/StdLibExtraDetails.h +++ b/AK/StdLibExtraDetails.h @@ -618,6 +618,24 @@ inline constexpr bool IsSameIgnoringCV = IsSame, RemoveCV>; template inline constexpr bool IsOneOfIgnoringCV = (IsSameIgnoringCV || ...); +template +struct __InvokeResult { }; + +template +struct __InvokeResult { + using type = decltype(( + declval() + .*declval())(declval()...)); +}; + +template +struct __InvokeResult { + using type = decltype((declval())(declval()...)); +}; + +template +using InvokeResult = typename __InvokeResult::type; + } #if !USING_AK_GLOBALLY @@ -637,6 +655,7 @@ using AK::Detail::FalseType; using AK::Detail::IdentityType; using AK::Detail::IndexSequence; using AK::Detail::IntegerSequence; +using AK::Detail::InvokeResult; using AK::Detail::IsArithmetic; using AK::Detail::IsAssignable; using AK::Detail::IsBaseOf;