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 |