text: //////////////////////////////////////////////////////////////////////////////
  //
  // (C) Copyright David Abrahams, Vicente Botet, Ion Gaztanaga 2009.
  // Distributed under the Boost Software License, Version 1.0.
  // (See accompanying file LICENSE_1_0.txt or copy at
  // http://www.boost.org/LICENSE_1_0.txt)
  //
  // See http://www.boost.org/libs/move for documentation.
  //
  //////////////////////////////////////////////////////////////////////////////
  #include <boost/move/detail/config_begin.hpp>
  // move
  #include <boost/move/algorithm.hpp>
  #include <boost/move/iterator.hpp>
  // container
  #include <boost/container/deque.hpp>
  #include <boost/container/list.hpp>
  #include <boost/container/stable_vector.hpp>
  #include "../example/movable.hpp"
  
  template<class Container>
  int move_test()
  {
     bool use_move_iterator = false;
     bool done = false;
     while(!done){
        //Default construct 10 movable objects
        Container v(10);
  
        //Test default constructed value
        if(v.begin()->moved()){
           return 1;
        }
  
        //Move values
        Container v2;
        if(use_move_iterator){
           ::boost::copy_or_move( boost::make_move_iterator(v.begin())
                                , boost::make_move_iterator(v.end())
                                , boost::back_move_inserter(v2));
        }
        else{
           std::copy(v.begin(), v.end(), boost::back_move_inserter(v2));
        }
  
        //Test values have been moved
        if(!v.begin()->moved()){
           return 1;
        }
  
        if(v2.size() != 10){
           return 1;
        }
  
        if(v2.begin()->moved()){
           return 1;
        }
        done = use_move_iterator;
        use_move_iterator = true;
     }
     return 0;
  }
  
  int main()
  {
     namespace bc = ::boost::container;
  
     if(move_test< bc::vector<movable> >()){
        return 1;
     }
     if(move_test< bc::list<movable> >()){
        return 1;
     }
     if(move_test< bc::stable_vector<movable> >()){
        return 1;
     }
     return 0;
  }
  
  #include <boost/move/detail/config_end.hpp>
  