C++0x の最新ドラフトが N3225 に

本の虫: post-Batavia mailiingの簡易レビュー


C++0x の最新ドラフトが N3225 になったようです。


今回のドラフトにおける主な変更点ですが、

  • ユーザ定義のデストラクタ、ムーブ、コピーが存在する場合
    • 暗黙のムーブは生成されない
    • 暗黙のコピーは deprecated に
  • noexcept(auto) の追加、*1デストラクタ及び delete 演算子をデフォルトで noexcept に
  • ユーザ定義されたデストラクタは、明示的に例外指定をされていない限り、デストラクタ本体の記述に依らず、自動生成されたデストラクタと同じ例外指定を持つように*2
  • attribute の一部を削除、代わりに文脈依存キーワード final, override を追加
  • の一部メタ関数 (has_xxx_yyy) の名前を変更

辺りでしょうか。
その他の変更点、および解説は

辺りを参照してください。


個人的に大きいと思ってるのが、前に記事にも書いたコピー自動生成の deprecated 化と、
それから に対する変更ですね。


新しいドラフト(重いので注意!)、あるいは提案のペーパーを読むと分かりますが、
今回の変更では、 has_default_constructor から has_nothrow_move_assign までという、
少なくない数のメタ関数の名前(と詳細)が変更されています。


これらは、まぁ確かに妥当な変更ではあるのですが、
この中には has_trivial_destructor など、僕が普段から使うようなものも多く、
既存のコードを変更する必要があるので、少々対応が面倒そうです。


まぁ grep かければ分かる問題なので、今はとりあえず放置するとして、
コンパイラが対応したら忘れないで変更すればいいかな、と思います。

// っていうか FCD 出した後に行う変更としては地味にクリティカルな気がする
// まぁなんか二度目のFCDを発行するかもしれないみたいですが
// なんでもいいから、とにかく早く確定させて欲しいところ(切実

*1:提案のみだったようです

*2:指摘コメント感謝