mingw32(の gcc)と C++ と例外

mingw32 の C++ で例外がちゃんと捕まえられない、と思ったら(gcc じゃなくて)g++ 使ったらいけたみたい」的な話が個人的に気になったので、自分でもすこし確かめてみました。
コンパイラmingw 公式の gcc 4.5.2 でホスト OS は WinXP です。

すごく大雑把にいうと、gcc 経由でリンクするとデフォルトで libgcc がスタティックリンクされ、g++ だと DLL 版の libgcc が使われるようです。libstdc++ の DLL は libgcc の DLL をインポートしているので、exe 側で libgcc を静的に埋め込まれているといろいろと辻褄が合わなくなる…ということなんでしょうか?

で、ためしに -shared-libgcc を明示的に指定すると、gcc 経由でリンクしても例外がちゃんと捕まるようになりました。

ついでに -static 指定して全部(libstdc++ も)スタティックリンクしてみましたが、当然ながらうまく動作しました。