本の虫: post-Batavia mailiingの簡易レビュー
C++0x の最新ドラフトが N3225 になったようです。
今回のドラフトにおける主な変更点ですが、
- ユーザ定義のデストラクタ、ムーブ、コピーが存在する場合
- 暗黙のムーブは生成されない
- 暗黙のコピーは deprecated に
noexcept(auto) の追加、*1デストラクタ及びdelete 演算子をデフォルトで noexcept に- ユーザ定義されたデストラクタは、明示的に例外指定をされていない限り、デストラクタ本体の記述に依らず、自動生成されたデストラクタと同じ例外指定を持つように*2
- attribute の一部を削除、代わりに文脈依存キーワード final, override を追加
の一部メタ関数 (has_xxx_yyy) の名前を変更
辺りでしょうか。
その他の変更点、および解説は
- http://cpplover.blogspot.com/2010/10/pre-batavia-mailing.html
- http://cpplover.blogspot.com/2010/11/c0x.html
- http://cpplover.blogspot.com/2010/12/post-batavia-mailiing.html
辺りを参照してください。
個人的に大きいと思ってるのが、前に記事にも書いたコピー自動生成の deprecated 化と、
それから
新しいドラフト(重いので注意!)、あるいは提案のペーパーを読むと分かりますが、
今回の変更では、 has_default_constructor から has_nothrow_move_assign までという、
少なくない数のメタ関数の名前(と詳細)が変更されています。
これらは、まぁ確かに妥当な変更ではあるのですが、
この中には has_trivial_destructor など、僕が普段から使うようなものも多く、
既存のコードを変更する必要があるので、少々対応が面倒そうです。
まぁ grep かければ分かる問題なので、今はとりあえず放置するとして、
コンパイラが対応したら忘れないで変更すればいいかな、と思います。
// っていうか FCD 出した後に行う変更としては地味にクリティカルな気がする
// まぁなんか二度目のFCDを発行するかもしれないみたいですが
// なんでもいいから、とにかく早く確定させて欲しいところ(切実