今現在の時点で最新らしいC++0xのドラフト2008-10-04のN2798 (注意: 12MBのPDF)などを読んだ感想です。

(a) 18.4: abort, exit, quick_exit, 18.9: longjmp, 18.7.2.2: unexpected_handler, 18.7.3.1: terminate_handlerにも、[[noreturn]]を付加してほしいです(すでに18.7.4 nested_exceptionの一部メンバではnothrowが使われています)。あと、18.4 quick_exitでISO Cの_Exitを参照していますが、これもnoreturnを付けて<cstdlib>に引きずり込んだほうが良い気がします。

(b) こうした上で、コメント04. noreturnの関数が返らないようにする方法は、throwするかnoreturnな関数を呼び出すことと定められるのではないでしょうか。ただし、 実行パスが来ないことを示すVC++の__assume(0)などもあるので、「その他処理系定義の方法」を加えるべきかもしれません。

ただ、unexpected/terminate_handlerをnoreturnにして、かつコメント04が通ると、既存のコードがコンパイルできなくなる可能性があります。これはやはり気にかけるべきところでしょうか。

それとは別のことですが、(c) 0xAB.CDp12のようなC99と同じ十六進浮動小数点リテラルがないのが今更ながら意外でした。hexfloatマニピュレータが入るくらいだからあるだろうと思っていました。ユーザ定義リテラルでは、C99と同じものが作れない(ですよね?)ことが気になります。


スポンサード リンク

この記事のカテゴリ

  • ⇒ C++0x ドラフトを読む