diff options
Diffstat (limited to 'base/bind_internal.h')
-rw-r--r-- | base/bind_internal.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/base/bind_internal.h b/base/bind_internal.h index ac7cd00..ce6b5d6 100644 --- a/base/bind_internal.h +++ b/base/bind_internal.h @@ -104,7 +104,8 @@ template <bool is_method, typename... Args> struct BindsArrayToFirstArg : false_type {}; template <typename T, typename... Args> -struct BindsArrayToFirstArg<true, T, Args...> : is_array<T> {}; +struct BindsArrayToFirstArg<true, T, Args...> + : is_array<typename std::remove_reference<T>::type> {}; // HasRefCountedParamAsRawPtr is the same to HasRefCountedTypeAsRawPtr except // when |is_method| is true HasRefCountedParamAsRawPtr skips the first argument. @@ -401,11 +402,12 @@ struct BindState<Runnable, R(Args...), BoundArgs...> final InvokeHelperType, UnboundForwardRunType>; using UnboundRunType = MakeFunctionType<R, UnboundArgs>; - BindState(const Runnable& runnable, const BoundArgs&... bound_args) + template <typename... ForwardArgs> + BindState(const Runnable& runnable, ForwardArgs&&... bound_args) : BindStateBase(&Destroy), runnable_(runnable), ref_(bound_args...), - bound_args_(bound_args...) {} + bound_args_(std::forward<ForwardArgs>(bound_args)...) {} RunnableType runnable_; MaybeScopedRefPtr<HasIsMethodTag<Runnable>::value, BoundArgs...> ref_; |