From 7123d831328321e854b78047effe7a57192a764f Mon Sep 17 00:00:00 2001 From: kosak Date: Mon, 17 Nov 2014 02:04:46 +0000 Subject: Fix gmock Action behaviour when return type is Wrapper --- include/gmock/gmock-actions.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'include/gmock/gmock-actions.h') diff --git a/include/gmock/gmock-actions.h b/include/gmock/gmock-actions.h index de502048..f92e479f 100644 --- a/include/gmock/gmock-actions.h +++ b/include/gmock/gmock-actions.h @@ -534,16 +534,20 @@ class ReturnAction { // Result without considering explicit constructors, thus resolving the // ambiguity. value_ is then initialized using its copy constructor. explicit Impl(const linked_ptr& value) - : value_(ImplicitCast_(*value)) {} + : value_before_cast_(*value), + value_(ImplicitCast_(value_before_cast_)) {} virtual Result Perform(const ArgumentTuple&) { return value_; } private: GTEST_COMPILE_ASSERT_(!is_reference::value, Result_cannot_be_a_reference_type); + // We save the value before casting just in case it is being cast to a + // wrapper type. + R value_before_cast_; Result value_; - GTEST_DISALLOW_ASSIGN_(Impl); + GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl); }; // Partially specialize for ByMoveWrapper. This version of ReturnAction will -- cgit v1.2.3