フィボナッチ数を求める関数をC++で継続渡しで書いてみる足掻き

再帰の練習長6+をみて、C++で書いてみたいと思い、やってみた。
これも翻訳しているに過ぎないのだけど。

#include <iostream>
#include <functional>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/lambda/lambda.hpp>

namespace
{
  // 継続渡しでフィボナッチ数を求める
  int FibonacciCps(int n, boost::function<int(int)> cont)
  {
    return (n==1 || n==2) ?
      cont(1) :
      FibonacciCps(
        n-1,
        boost::bind(
          FibonacciCps,
          n-2,
          boost::bind(
            cont,
            boost::bind(std::plus<int>(), _1, _2))));
  }
}

int main()
{
  // フィボナッチ数を求めてみる
  std::cout << "FibonacciCps(10) = "
            << FibonacciCps(10, boost::lambda::_1) << std::endl;

  return 0;
}

うーん、うまくいかん。何がダメなんだろう?
理解もできてないし、翻訳もできてないじゃん!><