hamigaki::generator

VC++7.1/8.0、Borland5.82、CodeWarrior8.3で動くものができました。
<hamigaki/coroutine/coroutine.hpp>
<hamigaki/coroutine/generator.hpp>
クラステンプレートgeneratorの性質上、ヘッダファイルをインクルードするだけで使えないといけません。
その一方、Fiberを用いたコルーチンの実装にはどうしてもwindows.h(と、そこからインクルードされるヘッダ)で宣言される関数を参照する必要があります。
似た状況が、
http://www.boost.org/boost/detail/interlocked.hpp
にもあって、ここでは必要な関数のみ自前で宣言して、windows.hのインクルードを回避しています。
幸い、今回使用している関数の数は多くなく、構造体などは参照しないため、この方法で回避できました。
<hamigaki/coroutine/detail/fiber.hpp>


残る問題はMinGWCygwinでself.exit()が動作しないことです。
どうもg++の例外処理がファイバに対応していないようで、ファイバ関数内部で例外を送出するとcatchで捕捉できない場合がありました。
MinGWCygwinも--enable-sjlj-exceptions付きでconfigureされたg++なので、別の例外処理方法を選択すれば動くかもしれません。とはいえ、この状態で動かないと役に立たないですよね。
g++とWin32ファイバの組み合わせは諦めて、別の方法を考えたほうがよさそうです。