1*f73050e7SLouis Dionne //===----------------------------------------------------------------------===// 2*f73050e7SLouis Dionne // 3*f73050e7SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*f73050e7SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*f73050e7SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*f73050e7SLouis Dionne // 7*f73050e7SLouis Dionne //===----------------------------------------------------------------------===// 8*f73050e7SLouis Dionne 9*f73050e7SLouis Dionne #ifndef TEST_SUPPORT_DOUBLE_MOVE_TRACKER_H 10*f73050e7SLouis Dionne #define TEST_SUPPORT_DOUBLE_MOVE_TRACKER_H 11*f73050e7SLouis Dionne 12*f73050e7SLouis Dionne #include <cassert> 13*f73050e7SLouis Dionne 14*f73050e7SLouis Dionne #include "test_macros.h" 15*f73050e7SLouis Dionne 16*f73050e7SLouis Dionne namespace support { 17*f73050e7SLouis Dionne 18*f73050e7SLouis Dionne struct double_move_tracker { 19*f73050e7SLouis Dionne TEST_CONSTEXPR double_move_tracker() : moved_from_(false) {} 20*f73050e7SLouis Dionne 21*f73050e7SLouis Dionne double_move_tracker(double_move_tracker const&) = default; 22*f73050e7SLouis Dionne 23*f73050e7SLouis Dionne TEST_CONSTEXPR_CXX14 double_move_tracker(double_move_tracker&& other) : moved_from_(false) { 24*f73050e7SLouis Dionne assert(!other.moved_from_); 25*f73050e7SLouis Dionne other.moved_from_ = true; 26*f73050e7SLouis Dionne } 27*f73050e7SLouis Dionne 28*f73050e7SLouis Dionne double_move_tracker& operator=(double_move_tracker const&) = default; 29*f73050e7SLouis Dionne 30*f73050e7SLouis Dionne TEST_CONSTEXPR_CXX14 double_move_tracker& operator=(double_move_tracker&& other) { 31*f73050e7SLouis Dionne assert(!other.moved_from_); 32*f73050e7SLouis Dionne other.moved_from_ = true; 33*f73050e7SLouis Dionne moved_from_ = false; 34*f73050e7SLouis Dionne return *this; 35*f73050e7SLouis Dionne } 36*f73050e7SLouis Dionne 37*f73050e7SLouis Dionne private: 38*f73050e7SLouis Dionne bool moved_from_; 39*f73050e7SLouis Dionne }; 40*f73050e7SLouis Dionne 41*f73050e7SLouis Dionne } // namespace support 42*f73050e7SLouis Dionne 43*f73050e7SLouis Dionne #endif // TEST_SUPPORT_DOUBLE_MOVE_TRACKER_H 44