shared_coroutine

shared_coroutineもサポートしました。
加えてcoroutineにはmove semanticsっぽいコピー操作(単にauto_ptrに入れただけ)を追加です。
<hamigaki/coroutine/detail/coroutine_template.hpp>
coroutineとshared_coroutineの違いはauto_ptrとshared_ptrの違いみたいなものです。
現状のBoost.Coroutineの実装ではintrusive_ptrを使っていて、coroutineは所有権を移動するように、shared_coroutine(coroutineを継承している)は所有権を共有するようにラップしてあります。

// FIXME: ATM a shared_coroutine is-a coroutine. This is to avoid
// inheriting privately and cluttering the code with lots of using
// declarations to unhide coroutine members and nested types.
// From a purity point of view, coroutines and shared_coroutines should
// be two different types.

とshared_coroutine.hppに書いてあるように、shared_coroutineがcoroutineを継承しているのは実装の都合です。
Hamigaki.Coroutineでは、

template<class R,
    class T1, class T2, ..., class Tn,
    class Pointer>    // ここでauto_ptrかshared_ptrを選択
class coroutine_baseN ;

という基底クラスを用意して、ここからcoroutineとshared_coroutineを派生させています。(つまりcoroutineとshared_coroutineの間に継承関係はありません)


まだ、コンストラクタのオーバーロード辺りの実装がかなり怪しいです。
コンパイラによって動作がバラバラな感じなので、あとで規格を確認しておきます。
(今のコードだとCodeWarrior8.3で動きません)