本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_58_0.qbk
- http://www.boost.org/users/history/version_1_58_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
既知の不具合
- Boost.Pythonは次のバージョン向けにビルドすることが出来ない: 3.0.X, 3.1.X, 3.2.X, 3.3.X
- 2.Xもしくは3.4以降にはこの問題はない
- Git上では次のコミットで修正された
- Boost.Fusionはconstexprに出来ない型との間にリグレッションが存在する #11211
- これは次のpull requestで修正された: GitHub PR #70, GitHub PR #71, GitHub PR #72
- パッチ
- 0001-Fix-exec_file-for-Python-3-3.4.patch (libs/python ディレクトリ以下で適用する)
- 0002-Fix-a-regression-with-non-constexpr-types.patch (libs/fusion ディレクトリ以下で適用する)
新ライブラリ
- Endian
- プロセッサのエンディアンに関係なく、適切なバイトオーダーに変換する型と関数。
- Sort
- 一般的な状況でO(n*log(n))よりも高速な、ハイブリッドな基数ソートであるスプレッドソート(spreadsort)を含む。
更新ライブラリ
- Asio
- Chrono
- Container
- Context
- Conversion
- DateTime
- Flyweight
- Function
- Functional/Factory
- Fusion
- Geometry
- Hash
- Interprocess
- Intrusive
- Lexical Cast
- Log
- Math
- Move
- Multi-index
- Multiprecision
- Optional
- Phoenix
- Predef
- Random
- Smart Pointers
- Thread
- TypeErasure
- TypeIndex
- Units
- Unordered
- Variant
Asio
- #10744 Windowsの
ConnextEx関数によって生成されるエラー値を、他の環境でも使えるようマッピングした - 新たなマクロ
BOOST_ASIO_DISABLE_CONNECTEXを追加した。これを使用することによって、ConnectExを明示的に無効にできる。 - #10624
windows::object_handleの競合状態を修正。これは、破棄に対する操作待ちで起きていた。 - FreeBSD環境でのIPv6アドレスの構文解析を修正。末尾にスコープIDが付いているときに、変換時に
EINVALが原因で失敗していた。 - #9465, #11070 Asioのデフォルト可視性を使用した際に起こる、共有ライブラリの可視性問題について回避策を導入。
- #10828 メモリ内のキーを読み込む際に、パスワードのコールバックを呼び出すようSSLラッパーを変更。
- SSLのエラーキューが各操作の前にクリアした際に起こる、SSLエラーの誤報を修正
ssl::stream<>が擬似的(spurious)に「短く読み込んだ(short read)」エラーを出力する可能性があったバグを修正- #10088 SSLエンジンの冗長なヌルポインタチェックを削除
- #10690 TLS v1.1と1.2を無効にするオプションを追加
- 非推奨だったOpenSSLの
ERR_remove_state関数の使用を削除 - #8835, #10884 ClangでのC++11機能の欠陥を修正
- #10982 g++での、C++11の
std::addressofの欠陥を修正 - マルチキャストのテストでの、
join_groupの失敗を非致命的に変更 - #11116 AsioのテストをBoost.Testから分離した
- チュートリアルで、結果をフラッシュするために
std::endlを使用するよう修正 - Clangのinteger sanitizerで報告された、符号なし整数のオーバーフローを修正
yield_contextを使用した非同期操作で、ムーブのみ可能な型を返せるようにした- 初期化関数から完了ハンドラを再入的(reentrant)に呼び出せるようにするため、
yield_contextを変更した - 最新のWindows SDKで動作するように、Windows Runtimeの検出方法を更新
Chrono
バージョン2.0.5
バグ修正
- #10778
boost::chronoのdurationクラスが、TriviallyCopyableでないためにstd::atomicに格納できない問題を修正 - #10840 テストコードtest_7868.cppにおいて、
puts()関数の呼び出しがstd::修飾されていなかった問題を修正 - #10851 テストコードtime_point_output.cppにおいて、
puts()関数の呼び出しがstd::修飾されていなかった問題を修正 - #10893 ドキュメントの細かな誤字を修正
- #10992 ChronoのIO state saverが、Boost.IO state saverと一貫していない問題を修正
- #10995
duration_put::put_value()で、少数が切り捨てられる問題を修正 - #11006
time_fmt_io_saverのインスタンス化がコンパイルエラーになる問題を修正 - #11012 chrono_io v2において、
boost::chrono::duration< boost::rational<int> >がコンパイルエラーになる問題を修正
Container
- 実験的に
small_vectorクラスを追加- 小さな要素数に最適化された
vector。テンプレートパラメータで指定された要素数の領域を事前に確保することにより、その要素数を超えない限り、insert()/push_back()でメモリ確保を行わない。 static_vectorとは異なり、フリーストアからメモリ確保し、キャパシティを超えた領域の拡張が可能。- LLVMのSmallVectorクラスを参考にしている
- 小さな要素数に最適化された
- 依存関係を大規模に見なおした。現在、Boost.Containerは、とても基本的なユーティリティのみをBoost.CoreとBoost.Intrusiveに依存する。プリプロセスされたコードのサイズが小さくなっているため、コンパイル時間が改善する。
- ランダムアクセスイテレータを持つコンテナ(
basic_string以外)に、nth()、index_of()メンバ関数を追加。nth()は、指定されたインデックスの要素を指すイテレータを取得するメンバ関数index_of()は、指定されたイテレータが指す要素のインデックスを取得するメンバ関数
- C++17の
allocator_traits<Allocator>::is_always_equalを追加。 - コンテナのコンストラクタを、以下の仕様に基づいて更新:2210. Missing allocator-extended constructor for allocator-aware containers
バグ修正
- #9931 再度開かれたチケット「
flat_map::insert(ordered_unique_range_t...)にmove_iteratorを渡せない」を修正 - #11076 container/detail/copy_move_algo.hppで、
memmove()とmemcpy()を名前空間修飾なしに呼び出していた問題を修正 - #10790 Boost.Containerのコンテナに
long longを指定するとコンパイルエラーになる問題を修正 - #10808
vectorの等値比較演算子が壊れていたので修正
ソースの破壊的変更
scoped_allocator_adaptorクラスのpropagate_on_container_copy_assignment、propagate_on_container_move_assignment、propagate_on_container_swapが、::boost::integral_constant<bool, true/false>ではなくなった。これは、MPLへの依存を減らすため、およびstd::integral_constantとの相互運用保証がなかったためである。boost::true_type/boost::false_typeを仮定したコードはコンパイルが通らなくなる。ワークアラウンドとして、内部の::value定数を使用して::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>のように書くことで、問題を回避できる。
Context
- ARM/iOS (32ビット + 64ビット) をサポート
- C++14向けに
execution_contextクラスを追加
Conversion
- #10780
polymorphic_pointer_downcast()関数とpolymorphic_pointer_cast()関数を追加した(Boris Rasin氏に感謝) - 例外を送出する全ての関数が、
boost::throw_exception()を使用するようにした - ドキュメントを更新
DateTime
to_time_t()関数を復活- 変数
v_typeの名前をvar_typeに変更。AIXのシステム変数と衝突していたため。 - ドキュメントを修正
Flyweight
std::hashとboost::hashでのハッシュサポートを追加。- この機能は
BOOST_FLYWEIGHT_DISABLE_HASH_SUPPORTをdefineすることによって無効化できる。この無効化機能は、ユーザーがflyweightクラスを自前でハッシュサポートしていた場合のためにある。
- この機能は
- メンテナンス上の修正をいくつか行った
Function
- #10585 C++11の右辺値、Boost.Moveの右辺値、両方の関数を受け取れるようにした
Functional/Factory
- 小さな破壊的変更 : アロケータを使用すべきでないことを示すためのデフォルトテンプレートパラメータを、
boost::none_tからvoidに変更。これは、Boost.Optionalへの依存をなくすための変更。- 引き続き
boost::none_tを使用したい場合は、BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_Tをdefineすること。ただし、この互換性のための機能は、将来のリリースから削除される可能性があることに注意。
- 引き続き
Fusion
- GitHub PR #12 Fusionのシーケンスを
boost::hashで使えるように - GitHub PR #51
std::reference_wrapperをサポート std::tupleをサポートconvert、mpl::clearの実装を追加
GitHub PR #54Fusionアダプタでの暗黙的な型推論をサポートADAPT_STRUCT、ADAPT_ADT、ADAPT_ASSOC_マクロで、メンバ変数の型を書かなくてよくなった
- ticket 9813, GitHub PR #14, GitHub PR #23, GitHub PR #26, GitHub PR #58 C++11/14 constexprのサポート
- ticket 10190
std::declval()の代わりにboost::declval()を使用するようにした - ticket 8622
boost::blankを使用するのをやめた - いくつかの
result_ofをSFINAE-friendlyに- ticket 10443
fusion::result_of::invoke - GitHub PR #35
fusion::result_of::copy、fusion::result_of::move、fusion::result_of::swap - GitHub PR #41
fusion::result_of::at_c、fusion::result_of::at
- ticket 10443
- ticket 7304
result_of::size::valueとresult_of::size::type::valueの型が同じになった - ticket 6507, ticket 7651
result_of::at<Seq, N>::typeは、Nがシーケンスの要素数未満の場合にのみ定義されるようになった - ticket 8457 インクルード漏れを修正
- ticket 6090, ticket 5324, GitHub PR #33, GitHub PR #53, GitHub PR #56 多くのドキュメントを修正 & 改善
以下の記事も参照:
Geometry
新機能
- 新たなアルゴリズム
num_segmentsを追加。このアルゴリズムは、ジオメトリのセグメント数を返す。 is_validアルゴリズムに、新たなオーバーロードを追加。これは2番目の引数でstringの参照を受け取り、ジオメトリの有効性と無効正に関するメッセージで埋める。is_validアルゴリズムに、新たなオーバーロードを追加。これは2番目の引数でenumの参照を受け取り、ジオメトリの有効性と無効性に関する値を設定する。disjointとintersectsに、以下のジオメトリの組み合わせサポートを追加:point/multipointmultipoint/multipointmultipoint/segmentmultipoint/box
改善
Bufferに、linestringのためのflat-endサポートを追加。- Buffer now supports flat-ends for linestrings with a bend close to the start (such that buffered segment crosses flat-end).
Bufferのパフォーマンスを大幅に向上させた。PolygonのPartitionのパフォーマンスを大幅に向上させた。全てのオーバーレイ操作が改善する可能性がある。
解決したチケット
- #8379 行列式の比較結果が間違っている
- #10108 ジオメトリの一つの点にtouchする特定の状況において、オーバーレイ操作がエラーになる
- #10201 座標系の比較に、別な関数を使用する提案(wontfix : 問題はあるけれど、いまは修正できない)
- #10467, #10863 テンプレートパラメータ名がtermios.hの
B0マクロと衝突している - #10640 CCW Polygonにおいて、
buffer()の結果が間違っている - #10666 MSVCコンパイラの警告C4127 : 「条件式が定数になっている」を修正
- #10747 再スケジューリングが、areal/arealの設定操作が原因でエラーになっている
- #10770
Bufferが巨大な距離、もしくはrough round joinで失敗する。失敗する場所は、凹所(concavities)の交差しないところ - #10658
sym_differenceが、intのポリゴンに対して間違った結果を生成する - #10835
multilinestringとpolygonのdifferenceが、間違った結果を生成する - #10861
RtreeのValueがポインタを含むpairもしくはtupleであり、Geometryデフォルト比較のequal_toを使用している場合に、コンパイルエラーになる - #10887
Linear/MultiPolygonのwithin()とrelate()が、不正な結果になる - #10890
Point/Segmentのdisjoint()が不正な結果になる - #10904
relate_cartesian_segments戦略において、最上位次元のセグメントの計算が間違っている - #10912
Areal/Arealのwithin()とrelate()が、不正な結果になる - #10951 WindowsのIntelコンパイラにおいて、
/bigobjフラグを設定するとテストに失敗する - #10957 様々な関係操作において、アサーションが失敗し、不正な結果を出力する
- #10958
L/LとL/Aのdijoint()が、不正な結果になる - #10959
no_rescale_policyを使用すると、get_turns()がアサーションに失敗する - #10960
L/Aのget_turns()が不正な結果になる。turnが不足している。 - #10961
L/Aのget_turns()が不正な結果になる。linear spikeのturnが不正。 - #11112 Solarisプラットフォームのマクロ名との衝突により、コンパイルエラーになる
- #11121 整数座標系(integral coordinates)の
difference()が不正な結果になる
バグ修正
multipoint/polygon、multipoint/multipolygonの距離の計算でのバグを修正(point内部のarealジオメトリを誤って検出していた)flatten_iteratorの代入演算子で、アクセス違反するバグを修正- Cartesian segment-segmentの交差戦略のバグを修正。ひとつのセグメントの点への縮退(degenerate)が、ほかへの縮退をしないセグメントと同一線上にあるときに起こる。
centroid()のバグを修正。たとえばゼロ面積のようなものを計算したときに、非決定的な結果になる- 限られたポイント数のjoinでの、
bufferのバグを修正。 - 鋭いコーナーの周りにある限られたポイント数のround joinでの、
bufferのバグを修正 - 大きなバッファ距離のjoinでの、
bufferのバグを修正 - ポイント数を追加するround endでの、
bufferのバグを修正 - 大きなバッファ距離のflat endでの、
bufferのバグを修正 - 大きな負のバッファ距離のinterior ringでの、
bufferのバグを修正 - input rangeが空である場合に、
closing_iteratorが動作しないバグを修正 multilinestringを含む閉じたシンプルなlinestringがハンドリングされない、is_simpleのバグを修正rtreeの、イテレータの組もしくはRangeを受け取るコンストラクタ(パッキングアルゴリズム)のバグを修正。破棄済みの一時オブジェクトへの参照を使用していた。これは、distance()とcomparable_distance()にも影響する。このバグは、rtreeもしくはdistance()アルゴリズムで、アサーション失敗やセグメンテーションフォルトなど、予期しない動作をする可能性がある。rtreeのcount()メンバ関数のバグを修正。破棄済みの一時オブジェクトの参照を使用していた。このバグが起こると、大きの場合に0が返る。- Rangeのハンドリング関係のバグを修正。いくつかのアルゴリズムで、非コンテナのRangeをジオメトリとして扱った場合に、コンパイルが通ってしまうことを防止する(Samuel Debionneに感謝)
Hash
- GitHub PR #3 strict aliasing違反を修正
Interprocess
- コンパイル時の依存関係を削減した。Boost.Containerの変更に対する更新。
バグ修正
- GitHub PR #13 HaikuはXSI共有メモリを持っていないため、このライブラリを使用できない
Intrusive
- とくにフックとイテレータのために、コンパイルの依存関係、ヘッダ、Boost.Preprocessorの使用を削減。
バグ修正
- Boost Trac #6720 statelessラムダを使用すると、VC11 Beta環境において
intrusive::unordered_set::clear_and_disposeのコンパイルに失敗する - #10771
slistのremove_ifが壊れている - #10853 提案文書に従って
pointer_traitsのドキュメントを記載 - #10987
any_xxx_node_traitsは参照を返すべきではない
Lexical Cast
- ticket 5660, ticket 6975, ticket 10639 浮動小数点数の変換に
std::streamを使用するようにした。
Log
バグ修正
- スレッドIDのフォーマットを修正
- プロセスIDのフォーマットを修正
- GNU Hurdでのビルド失敗を修正
- ticket 11016 ファイルシステムの空き領域が使い尽くされている場合の、text file sink backendの間違った挙動を修正
- ticket 11106
attribute_set::insert()がいくつかの場合で正しくない挙動をしており、以前に挿入した要素を見つけられなくなっていたのを修正 - ticket 11148 属性値集合に多くの属性値が挿入された際に
attribute_value_set::size()が正しくない挙動をしていたのを修正
より詳細な変更は、Changelogを参照。
Math
- 2つの特殊関数
trigamma()とpolygamma()を追加 - 楕円積分のコード(Elliptic integral code)に、Carlsonの最新アルゴリズムを使うよう、大規模な更新を行った。この変更によって、以前よりも安定し、より正確になり、若干高速になるはずだ。CarlsonのRG積分のサポートも追加した。
- 楕円積分の機能として、
ellint_d()、jacobi_zeta()、heuman_lambda()を追加 - 名前空間内で定義している定数は、
constexprに準拠したコンパイラであればconstexpr定数として定義するようにした(#10901) - ベータ関数、ガンマ関数、および楕円積分で、見かけ上のアンダーフローとオーバーフローが起こる様々なケースを修正。Rocco Romeo氏に感謝。
- 3引数版の
legendre_p()とlegendre_q()関数に、最後の引数としてポリシーが指定されなかった場合に、オーバーロードされないように修正した。 - 不完全な
beta()関数の、いくつかの死んだコードを整理(#10985) - 極値pdfの巨大な値の入力を修正(#10938)
- ドキュメントに使用しているグラフと方程式の画像を、PNGからSVGに切り替えた
Move
BOOST_MOVE_BASEユーティリティを追加したadl_move_swap()ユーティリティを追加した- 他のBoostライブラリへの依存関係を削減し、軽量化した。
バグ修正
- #11044
boost::rvがunionから継承するケースがあったので修正
Multi-index
-
検索で
key_typeの一時オブジェクトが作られる状況を効率化した。以下のようなケースだ:typedef multi_index_container< std::string, indexed_by< ordered_unique<identity<std::string> > > > multi_t; ... multi_t m=...; m.find("boost"); // std::stringではなくconst char*として渡されるこれまでのバージョンでは、
find操作ではstd::string型の一時オブジェクトがいくつか作られていた。十分に高度なコンパイラでは、一時オブジェクトはひとつだけ作られるようになった。 -
メンテナンス上の修正を行った
Multiprecision
- #10993
frexp()関数は、Expression templateを常に使わないようにした - #10924 Cygwinやその他のプラットフォームでの
cpp_dec_floatのサポートを改善した。long doubleのサポートが欠如していた。 - #10990
noexceptのサポートを改善し、さらなるテストを追加した。 - Intel 15.0とSolaris 12.4向けの、様々なワークアラウンドを追加
Optional
- ドキュメントの改善および、IO操作とヘッダファイルについての記載
- バグ修正
boost::none_tは即値の0から変換できなくなった。これはoptional<rational<int>> oi = 0の様な例で値を格納していないoptionalのオブジェクトが生成されるのを防ぐためであるBOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCESを定義することでムーヴセマンティックスを無効化できるようにした。これはticket 10399のためのワークアラウンドである- ticket 10825
optional_io.hppのインクルードを忘れていた際に、optionalをストリームに渡すとリンクタイムエラーとなっていたのをコンパイルエラーとするように改良 - ticket 11087
UがTに代入若しくは変換できない場合にoptional<U>をoptional<T>に代入できてしまっていたのを修正 - ticket 10839
optional<T&>の値をmoveできなかった問題を修正
Phoenix
バージョン3.2.0
新機能
- オプショナルな拡張として、遅延リストを追加
新たなコード例
boost::bind()とboost::phoenix::bind()の互換性を示すためのコード例bind_gooseを追加
バグ修正
- #10927
phoenix/test/stdlib/cmath.cppでのfabs()関数の呼び出しに、std::修飾が抜けていた - #11085
phoenix/test/function/function_tests.cppでのpow()関数の呼び出しに、std::修飾が抜けていた bindとlambdaとletの、いくつかのテストケースが失敗していたので修正
Predef
バージョン1.2
- Visual Studio 2015のバージョン番号が間違っていたので修正
- Haiku OSを判定するためのマクロ名が
BOOST_OS_BEOSになっていたので、BOOST_OS_HAIKUに修正。 - Android OSでのエンディアン判定が間違っていたので修正
predef_checkプログラムと、ビルド構成チェックのためのBBv2インテグレーションを追加
Random
- 非心カイ二乗分布である
non_central_chi_squared_distributionクラスを追加。
Smart Pointers
enable_shared_from_thisクラスに、thisを指すweak_ptrを返すweak_from_this()メンバ関数を追加
Thread
バージョン4.5.0
実験的な新機能
- #9600 Async: n4088ベースの
task_regionを追加 - #10611 emplace版の
promise::set_valueとemplace make_ready_futureを追加 - #10826 スケジューラによるExecutorを追加
- #11048 継続ベースの
serial_executorを追加
バグ修正
- #6787 システム時刻が巻き戻った時に
boost::thread::sleep()がハングしていたのを修正 - #10734
submit関数が異なるExecutorで異なる挙動をしていたのを修正。方や例外を投げ、方やエラーを握りつぶしていた(thread_executorとinline_executor) - #10736 タスクが投げた例外を握りつぶしていた。一貫性の為にN3785で提案された様に
std::terminateを呼ぶ - #10737
serial_executorにおいて、タスクが例外を投げた場合に永遠に待ち続けるのを修正 - #10822 AndroidでBoost.Threadがコンパイル出来なかったのを修正
- #10824 1.57において、Windows XP SP2以前との互換性に問題があったのを修正
- #10963
future<future<T>>::thenを実装した - #10964
future<future<T>>::unwrap().then()のデッドロックを修正 - #10968
async()が返すfutureへのfuture::then()はブロックしなくなった - #10971
shared_future::get()とshared_future::get_or()はconst修飾された - #10972
shared_future::then()を複数回呼んでも問題なくなった - #10979
make_ready_futureに渡されたreference_wrapper<T>をT&に推論するようになった - #10996 Windowsで
thread::physical_concurrency()が失敗していたのを修正 - #11035 Androidで
BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPEが定義されていなかった - #11053
run_thread_exit_callbacksで純粋仮想関数の呼び出しが行われていたのを修正
TypeErasure
- MSVC12でのコンパイルエラーを修正
TypeIndex
- プラットフォームがサポートしている場合、リンク時のアサーションを追加
Units
- 任意の次元における基底単位を修正((https://github.com/boostorg/units/commit/423adb31c1eb9687d21a8af5506830a0de53a464))
Unordered
- 状態を持ったアロケータを使った際のmove代入演算子の修正 (
propagate_on_container_move_assign) (#10777) - バケットの数を計算する際にオーバーフローする可能性があったのを修正 pull request 4
- その他の変更についてはchangelogを参照のこと
Variant
- 破壊的変更: 取得関数(
boost::get<U>(VariantT)及びboost::polymorphic_get<U>(VariantT))について、コンパイル時に検査を行う様に変更。新しい取得関数はUがVariantTに格納でき無い場合コンパイルエラーとなる。BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULTを定義することでデフォルトの挙動を戻すことが出来る。get.hpp、polymorphic_get.hpp及び#547を参照のこと - 不足していた比較関数を追加 #8620, #10811
- ドキュメントの修正 #10273, #10653
- Clangで可変長テンプレートを有効に #10832
- VisitorにてC++14の自動的な戻り値の型推論をできるようにした。これにより
boost::apply_visitorでgeneric lambdasを使用することができるようになる。
auto str = boost::apply_visitor(
[](auto v) {
return boost::lexical_cast<std::string>(v);
},
variant_instance
);
swap関数の改良 #10882- 可変長テンプレートに多くの改良を加えた。これによりより多くの関数が可変長テンプレートをサポートするようになった。
- 複数のバグ修正とテストの改良を加えた。また、Coverallsへの対応も含む。
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.4
- Clang, C++14: 3.5, 3.6
- GCC: 4.4.7, 4.9.2
- GCC, C++98: 4.8.1, 4.8.2
- GCC, C++11: 4.4.7, 4.8.4, 4.9.2
- GCC, C++14: 4.9.2
- Windows:
- GCC, mingw: 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.2
- Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC: 4.4.2
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.1, 3.2, 3.3, 3.4
- Clang, C++14: 3.5, 3.6
- GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.9.2, 5.0.0 (experimental)
- GCC, C++11: 4.4.7, 4.8.4, 4.9.2
- GCC, C++14: 4.9.2
- Windows:
- GCC, mingw: 4.4.7, 4.5.4, 4.6.4, 4.7.3
- Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android
- Clang: 3.4, 3.5
- GCC: 4.8, 4.9
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC: 4.4.2