1//////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright David Abrahams, Vicente Botet, 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
12// move
13#include <boost/move/algorithm.hpp>
14#include <boost/move/iterator.hpp>
15// container
16#include <boost/container/deque.hpp>
17#include <boost/container/list.hpp>
18#include <boost/container/stable_vector.hpp>
19#include "../example/movable.hpp"
20
21template<class Container>
22int move_test()
23{
24 bool use_move_iterator = false;
25 bool done = false;
26 while(!done){
27 //Default construct 10 movable objects
28 Container v(10);
29
30 //Test default constructed value
31 if(v.begin()->moved()){
32 return 1;
33 }
34
35 //Move values
36 Container v2;
37 if(use_move_iterator){
38 ::boost::copy_or_move( boost::make_move_iterator(v.begin())
39 , boost::make_move_iterator(v.end())
40 , boost::back_move_inserter(v2));
41 }
42 else{
43 std::copy(v.begin(), v.end(), boost::back_move_inserter(v2));
44 }
45
46 //Test values have been moved
47 if(!v.begin()->moved()){
48 return 1;
49 }
50
51 if(v2.size() != 10){
52 return 1;
53 }
54
55 if(v2.begin()->moved()){
56 return 1;
57 }
58 done = use_move_iterator;
59 use_move_iterator = true;
60 }
61 return 0;
62}
63
64int main()
65{
66 namespace bc = ::boost::container;
67
68 if(move_test< bc::vector<movable> >()){
69 return 1;
70 }
71 if(move_test< bc::list<movable> >()){
72 return 1;
73 }
74 if(move_test< bc::stable_vector<movable> >()){
75 return 1;
76 }
77 return 0;
78}
79

source code of boost/libs/move/test/back_move_inserter.cpp