mirror of
https://git.mirrors.martin98.com/https://github.com/google/googletest.git
synced 2025-08-14 05:56:00 +08:00
Cast mutable lvalue references to const from testing::ResultOf
PiperOrigin-RevId: 716343482 Change-Id: I125bc4725886958d026c88f3902a8289e476598b
This commit is contained in:
parent
e4ece4881d
commit
2b6b042a77
@ -2281,6 +2281,9 @@ class ResultOfMatcher {
|
|||||||
class Impl : public MatcherInterface<T> {
|
class Impl : public MatcherInterface<T> {
|
||||||
using ResultType = decltype(CallableTraits<Callable>::template Invoke<T>(
|
using ResultType = decltype(CallableTraits<Callable>::template Invoke<T>(
|
||||||
std::declval<CallableStorageType>(), std::declval<T>()));
|
std::declval<CallableStorageType>(), std::declval<T>()));
|
||||||
|
using InnerType = std::conditional_t<
|
||||||
|
std::is_lvalue_reference<ResultType>::value,
|
||||||
|
const typename std::remove_reference<ResultType>::type&, ResultType>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
template <typename M>
|
template <typename M>
|
||||||
@ -2288,7 +2291,7 @@ class ResultOfMatcher {
|
|||||||
const CallableStorageType& callable, const M& matcher)
|
const CallableStorageType& callable, const M& matcher)
|
||||||
: result_description_(result_description),
|
: result_description_(result_description),
|
||||||
callable_(callable),
|
callable_(callable),
|
||||||
matcher_(MatcherCast<ResultType>(matcher)) {}
|
matcher_(MatcherCast<InnerType>(matcher)) {}
|
||||||
|
|
||||||
void DescribeTo(::std::ostream* os) const override {
|
void DescribeTo(::std::ostream* os) const override {
|
||||||
if (result_description_.empty()) {
|
if (result_description_.empty()) {
|
||||||
@ -2318,7 +2321,7 @@ class ResultOfMatcher {
|
|||||||
// takes a non-const reference as argument.
|
// takes a non-const reference as argument.
|
||||||
// Also, specifying template argument explicitly is needed because T could
|
// Also, specifying template argument explicitly is needed because T could
|
||||||
// be a non-const reference (e.g. Matcher<Uncopyable&>).
|
// be a non-const reference (e.g. Matcher<Uncopyable&>).
|
||||||
ResultType result =
|
InnerType result =
|
||||||
CallableTraits<Callable>::template Invoke<T>(callable_, obj);
|
CallableTraits<Callable>::template Invoke<T>(callable_, obj);
|
||||||
return MatchPrintAndExplain(result, matcher_, listener);
|
return MatchPrintAndExplain(result, matcher_, listener);
|
||||||
}
|
}
|
||||||
@ -2331,7 +2334,7 @@ class ResultOfMatcher {
|
|||||||
// use stateful callables with ResultOf(), which doesn't guarantee
|
// use stateful callables with ResultOf(), which doesn't guarantee
|
||||||
// how many times the callable will be invoked.
|
// how many times the callable will be invoked.
|
||||||
mutable CallableStorageType callable_;
|
mutable CallableStorageType callable_;
|
||||||
const Matcher<ResultType> matcher_;
|
const Matcher<InnerType> matcher_;
|
||||||
}; // class Impl
|
}; // class Impl
|
||||||
|
|
||||||
const std::string result_description_;
|
const std::string result_description_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user