| Index: base/bind_helpers.h
|
| diff --git a/base/bind_helpers.h b/base/bind_helpers.h
|
| index 590d788b96e0a650e22065884d4c8dc41d63531e..bf9844b1e6d97fa3686e24c6adb666821a68daf7 100644
|
| --- a/base/bind_helpers.h
|
| +++ b/base/bind_helpers.h
|
| @@ -458,15 +458,15 @@ T Unwrap(PassedWrapper<T>& o) {
|
| //
|
| // The first argument should be the type of the object that will be received by
|
| // the method.
|
| -template <bool IsMethod, typename... Args>
|
| -struct IsWeakMethod : public std::false_type {};
|
| +template <bool IsMethod, typename ArgsTuple>
|
| +struct IsWeakMethod : std::false_type {};
|
|
|
| template <typename T, typename... Args>
|
| -struct IsWeakMethod<true, WeakPtr<T>, Args...> : public std::true_type {};
|
| +struct IsWeakMethod<true, std::tuple<WeakPtr<T>, Args...>> : std::true_type {};
|
|
|
| template <typename T, typename... Args>
|
| -struct IsWeakMethod<true, ConstRefWrapper<WeakPtr<T>>, Args...>
|
| - : public std::true_type {};
|
| +struct IsWeakMethod<true, std::tuple<ConstRefWrapper<WeakPtr<T>>, Args...>>
|
| + : std::true_type {};
|
|
|
|
|
| // Packs a list of types to hold them in a single type.
|
| @@ -550,19 +550,25 @@ struct MakeFunctionTypeImpl<R, TypeList<Args...>> {
|
| template <typename R, typename ArgList>
|
| using MakeFunctionType = typename MakeFunctionTypeImpl<R, ArgList>::Type;
|
|
|
| -// Used for ExtractArgs.
|
| +// Used for ExtractArgs and ExtractReturnType.
|
| template <typename Signature>
|
| struct ExtractArgsImpl;
|
|
|
| template <typename R, typename... Args>
|
| struct ExtractArgsImpl<R(Args...)> {
|
| - using Type = TypeList<Args...>;
|
| + using ReturnType = R;
|
| + using ArgsList = TypeList<Args...>;
|
| };
|
|
|
| // A type-level function that extracts function arguments into a TypeList.
|
| // E.g. ExtractArgs<R(A, B, C)> is evaluated to TypeList<A, B, C>.
|
| template <typename Signature>
|
| -using ExtractArgs = typename ExtractArgsImpl<Signature>::Type;
|
| +using ExtractArgs = typename ExtractArgsImpl<Signature>::ArgsList;
|
| +
|
| +// A type-level function that extracts the return type of a function.
|
| +// E.g. ExtractReturnType<R(A, B, C)> is evaluated to R.
|
| +template <typename Signature>
|
| +using ExtractReturnType = typename ExtractArgsImpl<Signature>::ReturnType;
|
|
|
| } // namespace internal
|
|
|
|
|