今現在の時点で最新らしい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++ ⇒ C++0x ドラフトを読む
ニーズに応じた新しい規格・仕様が策定されるのは結構なことですが、普及してくれるのでしょうか…。
Linux の gcc で下手に C99 を使ってしまって、VC でコンパイルが通らず難儀しました。
(そもそも、そのプログラムは Windows への移植の必要性ができたのが誤算だったのですが。)
こんな具合に、C99 は MS が無視を決め込んでいるせいもあって、策定からもうすぐ 9 年になるのに、まともに使えた試しが未だ無いです。