Visual Studio "14"最初のプレビュー版には,次期リリースに追加予定のC++ 11/14準拠に関する詳細が含まれている。今回,MicrosoftシニアデベロッパのStephen T. Lavavej氏が,"14"のC++14サポートレベルに関して,さらに詳細な解説をしてくれた。
氏の解説は,VS2013RTM以降に実施された変更を特に取り上げたもので,おもに3つのカテゴリ – STL(Standard Template Library)に対する追加,修正,非互換変更 – をカバーする。Lavavej氏によると,C++ STLに関する"14"の実装は,おもに4人の開発者 – 氏自身,P.J.Plauger氏,Artur Laksberg氏,James McNellis氏によって開発されたものだという。これは注目すべき点だ。
"14"で追加されるSTLサポートはすべて,C++14仕様だけではなく,もうひとつの技術仕様書(Filesystem "V3")にも基づいている。
- N3642 <chrono>/<string> ユーザ定義リテラル(UDL)
- N3644 Nullフォワードイテレータ
- N3654 quoted()
- N3657 不均一連想検索
- N3658 integer_sequence
- N3668 exchange()
- N3670 get<T>()
- N3671 デュアルレンジequal()/is_permutation()/mismatch()
- N3779 <complex> UDL
- N3887 tuple_element_t
- N3940 Filesystem "V3" 技術仕様
同じくC++14の一部であるLibrary Issue Resolutionのいくつか(1ダースをはるかに上回る数)が,仕様の補完として参照されている。"14"には,現行のSTLに対する修正も含まれている。<chrono>
によるクロックサポートの改善,<atomic>
のコンパイル時の正確性の改善(X86アセンブリコードも排除された),<locale>
に以前から(2006年以来)存在したバグの修正など,いくつかの部分が改善された。
生成されるオブジェクトファイルの効率性が向上し,VS2013での同等処理の出力に比べてかなり小さくなった。正規表現サポートにもさまざまな改良が加えられて,以前よりも安定した実装が提供される。
gets()
のユーザは,C++11およびC++14でそれが廃止されたことに注意が必要だ。従ってVisual Stduioでは,gets()
は<stdio.h>
にはによってCRTでは提供されるものの,STLの<cstdio>
には入らない。
すべての変更の結果としてLavavej氏が指摘するのは,後方互換性が損なわれている領域が存在することだ。その中には,FilesystemのV3インターフェースによる(V2に対する)変更や,_USE_32_BIT_TIME_T
の使用がコンパイル時に警告となる点などが含まれている。浮動小数点数の解析に関するiostream
の既知のバグが残っているが,これは開発中のままだ。
すべてを詳細に知りたい読者は,Lavavej氏の記事を参照してほしい。