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