なんでイライラするか

そもそもfor文でコンテナ回すと面倒くさくて仕方ないでしょ?

for(vector<int>::const_iterator it(v.begin()); it != v.end(); ++it){
  std::cout << *it << std::endl;
}

で,BOOST_FOREACH(ここのforeach.zip展開してboostのフォルダにforeach.hpp突っ込めばとりあえず使えます.詳細はドキュメント参照)はそれをだいぶ解消してくれてC++に無名関数がないという不満もだいぶ少なくなる(消滅はしない)けれど,まだ個人的に不満があって何がダメなのかというと

  • BOOST_FOREACHはvalue_typeに言及しないといけないので面倒
  • BOOST_FOREACHは値のコピーを取らないといけないので効率が気になる.(実際には参照を宣言して回避できるもののそれがまたイヤンな感じ)

前者はvalue_typeが比較的複雑なときに面倒.

std::vector<std::pair<int, int> > pair_vec;
BOOST_FOREACH(std::pair<int, int> p, pair_vec){

じゃあ,value_typeをtypedefすればよいじゃないかという話はあるけれどそうすると今度はそのtypedefが面倒.
要するにvalue_typeもしくはiteratorに「全く言及せずに」「それでいて型安全に」iterationをまわしたい.
で,これだと要するにtypeofを要求することになるので「それ無理ですから」といわれればそれで諦めが付くんだけれど,実際自分が欲しているようなFOREACHのエミュレーション手法を思いついたのが運の尽き.で,実際やってみたら一見全然関係ないこの仕様がとことん邪魔をしてVC7.1で実装できない(GCCだとできる)という超ムキー!!な状態が発生してここまでイライラするという・・・.いやまぁ,このVC7.1の仕様は言語規格的には正しいっぽいんですけどね・・・.