summaryrefslogtreecommitdiffstats
path: root/base/bind_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/bind_internal.h')
-rw-r--r--base/bind_internal.h8
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_;