C++ にも on が欲しい

Haskell には Data.Function に on という関数が用意されている.
http://haskell.org/ghc/docs/latest/html/libraries/base-4.2.0.0/Data-Function.html#v:on
関数 f, g から

\x y -> f (g x) (g y)

という関数を作る関数だ.
これが地味に便利な場面があり,C++ にも欲しいと思ったので STL の bind1st などを見ながら書いてみた.
http://gist.github.com/310371


std::tr1::function 便利ですね.