ちょっと待った!そのbind1stに渡す拘束値、本当に実体渡しでいいのかもう一度考えよう

当然のことなのですが、自分用なのでちょっとメモ。

  vector< int > va(12); fill( va.begin(), va.end() , 77 );
  vector< int > vb;

こういう状況があるときに、

for_each( va.begin(), va.end(), 
    my_bind1st_ref( mem_fun1( &vector< int >::push_back ), &vb ) );

こう書くのと、(おっと、my_bind1st_refはこちらな)

for_each( va.begin(), va.end(), 
    my_bind1st_ref( mem_fun1_ref( &vector< int >::push_back ), vb ) );

こう書くのとでは、当然結果がまるきり違ってくるぞと。
前者ではvbの中には、77という値がちゃんと1ダース分詰め込まれてくるのだが、後者ではそうは行かない。なぜなら、vb が実体渡しだからね。my_bind1st_ref_tの中に保持されたvbのコピーに1ダース詰め込んでるだけで、決してもとのvbには反映されないからね。そしてそれは次の行に処理が行った瞬間my_bind1st_ref_tと一緒に消えてなくなるだけだね。気をつけよう。