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 //[copy_movable_definition
15 //header file "copymovable.hpp"
16 #include <boost/move/core.hpp>
17 
18 //A copy_movable class
19 class copy_movable
20 {
21    BOOST_COPYABLE_AND_MOVABLE(copy_movable)
22    int value_;
23 
24    public:
copy_movable()25    copy_movable() : value_(1){}
26 
27    //Move constructor and assignment
copy_movable(BOOST_RV_REF (copy_movable)m)28    copy_movable(BOOST_RV_REF(copy_movable) m)
29    {  value_ = m.value_;   m.value_ = 0;  }
30 
copy_movable(const copy_movable & m)31    copy_movable(const copy_movable &m)
32    {  value_ = m.value_;   }
33 
operator =(BOOST_RV_REF (copy_movable)m)34    copy_movable & operator=(BOOST_RV_REF(copy_movable) m)
35    {  value_ = m.value_;   m.value_ = 0;  return *this;  }
36 
operator =(BOOST_COPY_ASSIGN_REF (copy_movable)m)37    copy_movable & operator=(BOOST_COPY_ASSIGN_REF(copy_movable) m)
38    {  value_ = m.value_;   return *this;  }
39 
moved() const40    bool moved() const //Observer
41    {  return value_ == 0; }
42 };
43 
44 //A copyable-only class
45 class copyable
46 {};
47 
48 //A copyable-only class
49 class non_copy_movable
50 {
51    public:
non_copy_movable()52    non_copy_movable(){}
53    private:
54    non_copy_movable(const non_copy_movable&);
55    non_copy_movable& operator=(const non_copy_movable&);
56 };
57 
58 //]
59 
60 #endif //BOOST_MOVE_TEST_COPYMOVABLE_HPP
61