次の例は、 --std=c++0x フラグを指定して GCC 4.4.6 を使用すると正常にコンパイルされますが、C++03 モードではコンパイルに失敗します。
#include <stdint.h>
#include <boost/container/vector.hpp>
struct data
{
   int               i_;
   boost::container::vector<data>      v_;
};
int main( int argc, char** argv )
{
    data myData;
    myData.i_ = 10;
    data myData2;
    myData2.i_ = 30;
    myData.v_.push_back( myData2 );
    return 0;
}
で正常にコンパイルされます
 g++ --std=c++0x test-cont.cpp
ただし、削除する--std=c++0xと次のエラーが発生します: g++ test-cont.cpp In file included from include/c++/4.4.6/memory:49, boost/container/container_fwd.hpp:36, boost/container/vector.hpp :20、test-cont.cpp:2 から:
include/c++/4.4.6/bits/stl_algobase.h: In static member function 
    static _OI std::__copy_move<false, false, std::random_access_iterator_tag>::
        __copy_m(_II, _II, _OI) [with _II = 
            boost::container::constant_iterator<data, long int>, _OI = data*]:
include/c++/4.4.6/bits/stl_algobase.h:397:   instantiated from 
    _OI std::__copy_move_a(_II, _II, _OI) 
        [with bool _IsMove = false, 
                   _II = boost::container::constant_iterator<data, long int>, _OI = data*]
include/c++/4.4.6/bits/stl_algobase.h:436:   instantiated from 
    _OI std::__copy_move_a2(_II, _II, _OI) 
    [with bool _IsMove = false, 
               _II = boost::container::constant_iterator<data, long int>, _OI = data*]
include/c++/4.4.6/bits/stl_algobase.h:468:   instantiated from 
    _OI std::copy(_II, _II, _OI) 
        [with _II = boost::container::constant_iterator<data, long int>, _OI = data*]
boost/move/move.hpp:1147:   instantiated from 
    boost::copy_or_move(I, I, F, 
        typename boost::move_detail::disable_if< boost::move_detail::is_move_iterator<I>, void>::type*) 
        [with I = boost::container::constant_iterator<data, long int>, F = data*]
boost/container/detail/advanced_insert_int.hpp:58:   instantiated from 
    void boost::container::container_detail::advanced_insert_aux_proxy<A, FwdIt, Iterator>::copy_remaining_to(Iterator) 
    [with A = std::allocator<data>, FwdIt = boost::container::constant_iterator<data, long int>, Iterator = data*]
test-cont.cpp:21:   instantiated from here
include/c++/4.4.6/bits/stl_algobase.h:343: error: 
    no match for operator= in * __result = 
        __first.boost::container::constant_iterator<T, Difference>::operator* 
        [with T = data, Difference = long int]()
test-cont.cpp:5: note: candidates are: data& data::operator=(data&)
boost::container::vectorには、c++03 コンパイラでコンパイルしたときにmove自動的に使用されると思われるセマンティクスが必要なようです。boost::move
手動でstruct data定義するように変更した場合:
- デフォルトのコンストラクタ
 - コピーコンストラクタ
 - 代入演算子
 - BOOST_RV_REF を使用してエミュレートされたムーブ コンストラクター
 - BOOST_RV_REF を使用したエミュレートされたムーブ代入演算子
 
この例はコンパイルされます。
これらのムーブ/コピー コンストラクターと代入演算子を C++03 用に手動で追加するのは面倒です。
これはバグboost::containerですか?もしそうなら、ブーストコミュニティに報告する最良の方法は何ですか.