Googletest export

Support templating MockFunction over function objects besides std::function.

PiperOrigin-RevId: 373586967
This commit is contained in:
Abseil Team
2021-05-13 11:57:24 -04:00
committed by CJ Johnson
parent d69a112956
commit 662fe38e44
2 changed files with 26 additions and 12 deletions

View File

@@ -1838,12 +1838,12 @@ corresponding to the provided F argument.
It makes use of MockFunction easier by allowing it to accept more F arguments
than just function signatures.
Specializations provided here cover only a signature type itself and
std::function. However, if need be it can be easily extended to cover also other
types (like for example boost::function).
Specializations provided here cover a signature type itself and any template
that can be parameterized with a signature, including std::function and
boost::function.
*/
template <typename F>
template <typename F, typename = void>
struct SignatureOf;
template <typename R, typename... Args>
@@ -1851,8 +1851,10 @@ struct SignatureOf<R(Args...)> {
using type = R(Args...);
};
template <typename F>
struct SignatureOf<std::function<F>> : SignatureOf<F> {};
template <template <typename> class C, typename F>
struct SignatureOf<C<F>,
typename std::enable_if<std::is_function<F>::value>::type>
: SignatureOf<F> {};
template <typename F>
using SignatureOfT = typename SignatureOf<F>::type;