書きかけで送ってしまった。
>>24は>>6をBoost.Lambda+regularに置き換えたもの。
このコードで、regularを外すとコンパイルエラーになる。
なぜかというと、公式のリファンレスに書いてある通り、
Boost.LambdaのファンクタがAssignableでないため。
それをどうにかするのがregularということだそうだ。

なお、>>24のコードはunsigned longを使っているため、
unsigned longが32ビット以下の環境では正しい結果を返さないことに注意。