constなcoroutine

boost::functionと違って、boost::coroutines::shared_coroutineはoperator()が非constになっています。
コルーチンは明らかに状態を持っていて、operator()はその状態を変更するわけなので、直感的には正しく思えます。
しかし、shared_coroutineの名前の通り、コルーチンの状態はshared_coroutineのコピー間で共有されていて、通常の状態を持ったファンクタとは意味合いが違います。
そもそも、operator()が非constであったとしても、

namespace coro = boost::coroutines;
typedef coro::shared_coroutine<void()> coro_type;

void call_const_coro(const coro_type& coro)
{

    // これは不可
//  coro();

    coro_type tmp(coro);
    tmp(); // でもこれは可
}

となって、結局constなコルーチンを呼び出せてしまいます。
そういうわけで、Hamigaki.Coroutineのshared_coroutineはoperator()をconstに変更しました。

差分

手抜き実装につき、状態を共有しないhamigaki::coroutines::coroutineまでconstになっています。
まぁ、いいか。