| // 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 "testing/gtest/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 |