| // Copyright (c) 2015 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "base/move.h" | |
| #include <gtest/gtest.h> | |
| namespace { | |
| class MoveOnly { | |
| MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(MoveOnly) | |
| public: | |
| MoveOnly() {} | |
| MoveOnly(MoveOnly&& other) {} | |
| MoveOnly& operator=(MoveOnly&& other) { return *this; } | |
| }; | |
| class Container { | |
| public: | |
| Container() = default; | |
| Container(const Container& other) = default; | |
| Container& operator=(const Container& other) = default; | |
| Container(Container&& other) { value_ = other.value_.Pass(); } | |
| Container& operator=(Container&& other) { | |
| value_ = other.value_.Pass(); | |
| return *this; | |
| } | |
| private: | |
| MoveOnly value_; | |
| }; | |
| Container GetContainerRvalue() { | |
| Container x; | |
| return x; | |
| } | |
| TEST(MoveTest, CopyableContainerCanBeMoved) { | |
| // Container should be move-constructible and move-assignable. | |
| Container y = GetContainerRvalue(); | |
| y = GetContainerRvalue(); | |
| } | |
| } // namespace |