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_MOVABLE_HPP
12 #define BOOST_MOVE_TEST_MOVABLE_HPP
13 
14 //[movable_definition
15 //header file "movable.hpp"
16 #include <boost/move/core.hpp>
17 #include <boost/move/traits.hpp>
18 
19 //A movable class
20 class movable
21 {
22    BOOST_MOVABLE_BUT_NOT_COPYABLE(movable)
23    int value_;
24 
25    public:
movable()26    movable() : value_(1){}
27 
28    //Move constructor and assignment
movable(BOOST_RV_REF (movable)m)29    movable(BOOST_RV_REF(movable) m)
30    {  value_ = m.value_;   m.value_ = 0;  }
31 
operator =(BOOST_RV_REF (movable)m)32    movable & operator=(BOOST_RV_REF(movable) m)
33    {  value_ = m.value_;   m.value_ = 0;  return *this;  }
34 
moved() const35    bool moved() const //Observer
36    {  return !value_; }
37 
value() const38    int value() const //Observer
39    {  return value_; }
40 };
41 
42 namespace boost{
43 
44 template<>
45 struct has_nothrow_move<movable>
46 {
47    static const bool value = true;
48 };
49 
50 }  //namespace boost{
51 //]
52 
53 #endif //BOOST_MOVE_TEST_MOVABLE_HPP
54