1 ////////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2009. 4 // Distributed under the Boost Software License, Version 1.0. 5 // (See accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 // 8 // See http://www.boost.org/libs/move for documentation. 9 // 10 ////////////////////////////////////////////////////////////////////////////// 11 #ifndef BOOST_MOVE_TEST_COPYMOVABLE_HPP 12 #define BOOST_MOVE_TEST_COPYMOVABLE_HPP 13 14 #include <boost/move/detail/config_begin.hpp> 15 16 //[copy_movable_definition 17 //header file "copymovable.hpp" 18 #include <boost/move/core.hpp> 19 20 //A copy_movable class 21 class copy_movable 22 { 23 BOOST_COPYABLE_AND_MOVABLE(copy_movable) 24 int value_; 25 26 public: copy_movable()27 copy_movable() : value_(1){} 28 29 //Move constructor and assignment copy_movable(BOOST_RV_REF (copy_movable)m)30 copy_movable(BOOST_RV_REF(copy_movable) m) 31 { value_ = m.value_; m.value_ = 0; } 32 copy_movable(const copy_movable & m)33 copy_movable(const copy_movable &m) 34 { value_ = m.value_; } 35 operator =(BOOST_RV_REF (copy_movable)m)36 copy_movable & operator=(BOOST_RV_REF(copy_movable) m) 37 { value_ = m.value_; m.value_ = 0; return *this; } 38 operator =(BOOST_COPY_ASSIGN_REF (copy_movable)m)39 copy_movable & operator=(BOOST_COPY_ASSIGN_REF(copy_movable) m) 40 { value_ = m.value_; return *this; } 41 moved() const42 bool moved() const //Observer 43 { return value_ == 0; } 44 }; 45 46 //A copyable-only class 47 class copyable 48 {}; 49 50 //A copyable-only class 51 class non_copy_movable 52 { 53 public: non_copy_movable()54 non_copy_movable(){} 55 private: 56 non_copy_movable(const non_copy_movable&); 57 non_copy_movable& operator=(const non_copy_movable&); 58 }; 59 60 //] 61 62 #include <boost/move/detail/config_end.hpp> 63 64 #endif //BOOST_MOVE_TEST_COPYMOVABLE_HPP 65