#include #include #include #include #include struct Request { Request() {}; //Move semantics... Request(BOOST_RV_REF(Request) r) : rvals() //Move constructor { rvals.swap(r.rvals); }; Request& operator=(BOOST_RV_REF(Request) r) //Move assignment { if (this != &r){ rvals.swap(r.rvals); } return *this; }; // Values I want to be moved, not copied. boost::container::vector rvals; private: // Mark this class movable but not copyable BOOST_MOVABLE_BUT_NOT_COPYABLE(Request) }; typedef boost::container::flat_map Requests; //typedef boost::container::map Requests2; int main() { Requests req; std::pair ret = req.insert( Requests::value_type( 7, boost::Request() ) ); std::cout << "Insert success for req: " << ret.second << std::endl; //Requests2 req2; //std::pair ret2 = req2.insert( Requests2::value_type( 7, Request() ) ); //std::cout << "Insert success for req2: " << ret2.second << std::endl; return 0; }