boost::lambdaの続き

ちょっと調べたら、boost::lambdaの簡単なバージョン(http://www.kmonos.net/wlog/sub/petitfex.hpp)を実装している方がいらっしゃいますね。より詳しい解説は

http://www.kmonos.net/alang/boost/classes/lambda.html
をどうぞ。
このpetitfex.hpp の実装。すげーの一言に尽きる。ちゃんと理解しているわけじゃないので、簡単な解説にとどめるがまず、


// int型定数 -----------------------------------
struct val {
val(int v) : v_(v) {} const int v_;
int operator()(int t) const { return v_; }
};
って所からしてオッタマゲーション。暗黙の型変換をフルに使うとは(Scott Meyersが怒りそう)。
しかし、わかっていない部分が幾つか、

// int型 => val型へのフィルタ ------------------

template struct tr { typedef V typ; };
template<> struct tr { typedef val typ; };


namespace {
static petit_fex::var X;
}
である。前者はSTLの中でothersとかいう名前の変数名で見たことがあるような・・・。一回解説も読んだんだけど、その時はイマイチわからなかったんだよね。
後者は無名namespaceに入れちゃっていいの?という感じです。無名namespaceって別の場所から参照できなくなっちゃうんじゃなかったっけ?(相当うろ覚え)
解説してくれる人募集です。
I need a hero !