もうちょっとなんだが
using namespace boost; function<int(int)> fact_maker_(any f) { struct lambda { static int fact(function<int(int)> g, int n) { return n ? n * g(n - 1) : 1; } }; function<function<int(int)>(any)> (* const any_cast_)(any &) = any_cast<function<function<int(int)>(any)> >; return bind(lambda::fact, bind(any_cast_(f), f), _1); } function<function<int(int)>(any)> fact_maker = fact_maker_; fact_maker(fact_maker)(5) // 120
ここまでは書けたんだがこの先fact_makerの名前を消すのに苦戦中。