本家リリースノート:
- 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 #54
Fusionアダプタでの暗黙的な型推論をサポート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
/multipoint
multipoint
/multipoint
multipoint
/segment
multipoint
/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のtrunが不正。 - #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
- 任意の次元における基底単位を修正(commit 423adb)
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
);
テスト済みコンパイラ
主要なテストコンパイラ:
- 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