にゃははー

はへらー

例外仕様とlambdaとunexpected

C++98/03からある変な(?)として例外仕様がある。C++0xのnoexceptと同じようなことをサポートしている機能だ。
通常例外仕様を書く事はないだろう。ましてやunexpected handlerなぞ・・・

例外仕様を記述することで予期しない例外を処理することが可能になる。つまり一気にabort()がコールされるような状況を切り抜けることが出来るかもしれない
例外仕様に書かれていない型が例外として投げられるとstd::set_unexpected()で設定されたハンドラ(デフォルトではstd::unexpected)が呼ばれる。

どうもlambdaを使用するとインライン化したりする影響なのか正しく処理されない様だ。
GCC4.5.1(ideone)/4.5.2/4.5.3(20110110)/4.6.0(20110107)
で同じ挙動を示した。

通常の関数の場合は問題ない。
正しくunexpectedの後にterminateが呼ばれている。

しかしlambdaの場合あたかもmainが例外を投げたかのごとく振舞う
これはC++0xの仕様として正しいのか?エキスパート各位の見解を求めたい。

場合によってはバグレポを投げよう。

[1/12 追記]
投げた
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47263