diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-24 12:15:48 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-28 13:30:04 +0000 |
commit | b014812705fc80bff0a5c120dfcef88f349816dc (patch) | |
tree | 25a2e2d9fa285f1add86aa333389a839f81a39ae /chromium/base/bind_internal.h | |
parent | 9f4560b1027ae06fdb497023cdcaf91b8511fa74 (diff) |
BASELINE: Update Chromium to 68.0.3440.125
Change-Id: I23f19369e01f688e496f5bf179abb521ad73874f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/base/bind_internal.h')
-rw-r--r-- | chromium/base/bind_internal.h | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/chromium/base/bind_internal.h b/chromium/base/bind_internal.h index cb66d928be8..d748f89f834 100644 --- a/chromium/base/bind_internal.h +++ b/chromium/base/bind_internal.h @@ -397,9 +397,9 @@ struct FunctorTraits<R (*)(Args...)> { static constexpr bool is_method = false; static constexpr bool is_nullable = true; - template <typename... RunArgs> - static R Invoke(R (*function)(Args...), RunArgs&&... args) { - return function(std::forward<RunArgs>(args)...); + template <typename Function, typename... RunArgs> + static R Invoke(Function&& function, RunArgs&&... args) { + return std::forward<Function>(function)(std::forward<RunArgs>(args)...); } }; @@ -440,8 +440,8 @@ struct FunctorTraits<R (Receiver::*)(Args...)> { static constexpr bool is_method = true; static constexpr bool is_nullable = true; - template <typename ReceiverPtr, typename... RunArgs> - static R Invoke(R (Receiver::*method)(Args...), + template <typename Method, typename ReceiverPtr, typename... RunArgs> + static R Invoke(Method method, ReceiverPtr&& receiver_ptr, RunArgs&&... args) { return ((*receiver_ptr).*method)(std::forward<RunArgs>(args)...); @@ -455,14 +455,31 @@ struct FunctorTraits<R (Receiver::*)(Args...) const> { static constexpr bool is_method = true; static constexpr bool is_nullable = true; - template <typename ReceiverPtr, typename... RunArgs> - static R Invoke(R (Receiver::*method)(Args...) const, + template <typename Method, typename ReceiverPtr, typename... RunArgs> + static R Invoke(Method method, ReceiverPtr&& receiver_ptr, RunArgs&&... args) { return ((*receiver_ptr).*method)(std::forward<RunArgs>(args)...); } }; +#ifdef __cpp_noexcept_function_type +// noexcept makes a distinct function type in C++17. +// I.e. `void(*)()` and `void(*)() noexcept` are same in pre-C++17, and +// different in C++17. +template <typename R, typename... Args> +struct FunctorTraits<R (*)(Args...) noexcept> : FunctorTraits<R (*)(Args...)> { +}; + +template <typename R, typename Receiver, typename... Args> +struct FunctorTraits<R (Receiver::*)(Args...) noexcept> + : FunctorTraits<R (Receiver::*)(Args...)> {}; + +template <typename R, typename Receiver, typename... Args> +struct FunctorTraits<R (Receiver::*)(Args...) const noexcept> + : FunctorTraits<R (Receiver::*)(Args...) const> {}; +#endif + // For IgnoreResults. template <typename T> struct FunctorTraits<IgnoreResultHelper<T>> : FunctorTraits<T> { |