Merge pull request #4225 from TurboGawron:non_moveable_struct_fix
PiperOrigin-RevId: 526972449 Change-Id: I77d8bd37807f6c6ab5256f1e6c4abc64cceee740
This commit is contained in:
commit
ccdeec888e
@ -811,32 +811,32 @@ TEST(ExpectCallTest, InfersCardinality1WhenThereIsWillRepeatedly) {
|
||||
// from a prvalue returned from a function.
|
||||
TEST(ExpectCallTest, NonMoveableType) {
|
||||
// Define a non-moveable result type.
|
||||
struct Result {
|
||||
explicit Result(int x_in) : x(x_in) {}
|
||||
Result(Result&&) = delete;
|
||||
struct NonMoveableStruct {
|
||||
explicit NonMoveableStruct(int x_in) : x(x_in) {}
|
||||
NonMoveableStruct(NonMoveableStruct&&) = delete;
|
||||
|
||||
int x;
|
||||
};
|
||||
|
||||
static_assert(!std::is_move_constructible_v<Result>);
|
||||
static_assert(!std::is_copy_constructible_v<Result>);
|
||||
static_assert(!std::is_move_constructible_v<NonMoveableStruct>);
|
||||
static_assert(!std::is_copy_constructible_v<NonMoveableStruct>);
|
||||
|
||||
static_assert(!std::is_move_assignable_v<Result>);
|
||||
static_assert(!std::is_copy_assignable_v<Result>);
|
||||
static_assert(!std::is_move_assignable_v<NonMoveableStruct>);
|
||||
static_assert(!std::is_copy_assignable_v<NonMoveableStruct>);
|
||||
|
||||
// We should be able to use a callable that returns that result as both a
|
||||
// OnceAction and an Action, whether the callable ignores arguments or not.
|
||||
const auto return_17 = [] { return Result(17); };
|
||||
const auto return_17 = [] { return NonMoveableStruct(17); };
|
||||
|
||||
static_cast<void>(OnceAction<Result()>{return_17});
|
||||
static_cast<void>(Action<Result()>{return_17});
|
||||
static_cast<void>(OnceAction<NonMoveableStruct()>{return_17});
|
||||
static_cast<void>(Action<NonMoveableStruct()>{return_17});
|
||||
|
||||
static_cast<void>(OnceAction<Result(int)>{return_17});
|
||||
static_cast<void>(Action<Result(int)>{return_17});
|
||||
static_cast<void>(OnceAction<NonMoveableStruct(int)>{return_17});
|
||||
static_cast<void>(Action<NonMoveableStruct(int)>{return_17});
|
||||
|
||||
// It should be possible to return the result end to end through an
|
||||
// EXPECT_CALL statement, with both WillOnce and WillRepeatedly.
|
||||
MockFunction<Result()> mock;
|
||||
MockFunction<NonMoveableStruct()> mock;
|
||||
EXPECT_CALL(mock, Call) //
|
||||
.WillOnce(return_17) //
|
||||
.WillRepeatedly(return_17);
|
||||
|
Loading…
Reference in New Issue
Block a user