本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_62_0.qbk
- http://www.boost.org/users/history/version_1_62_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
-
- ユーザースレッド/ファイバーのフレームワーク
-
- グラフィック処理、ビデオゲーム、シミュレーションアプリケーションなどで必要となる、2、3、4次元の静的なサイズを持つクォータニオン、ベクトル、行列を操作するためのジェネリックライブラリ
更新ライブラリ
- Atomic
- Chrono
- Circular Buffer
- Container
- Context
- Coroutine
- Coroutine2
- DLL
- Functional/Forward
- Geometry
- Interprocess
- Intrusive
- Lexical Cast
- Log
- Math
- Regex
- Optional
- Phoenix
- Test
- Thread
- TypeIndex
- Unordered
- Variant
Atomic
- Oracle StudioとSPARCのサポートを改善。SPARCv8+に対するネイティブのアトミック操作を提供するようにした
Chrono
- #11330
durationをゼロ初期化するのは、C++98モードもしくはBOOST_CHRONO_DURATION_DEFAULTS_TO_ZEROがdefineされたときのみとし、それ以外は未初期化とした - #11618 Chrono IO V2のドキュメントで「ios_state.hpp」というヘッダが記載されていたが、正しくは「ios_base_state.hpp」
- #11631 Chrono IO V2で
clock_stringをカスタマイズできなくなっていた問題を修正
Circular Buffer
- #6277 デバッグ実装がデバッグモードで使用されなくなる。デバッグ実装には、通常の実装と同じレベルのスレッド安全性の保証がない。この変更により
BOOST_CB_DISABLE_DEBUGマクロは使用されなくなり、代わりにBOOST_CB_ENABLE_DEBUGマクロを定義することでデバッグ実装が有効になる。
Container
- バグ修正
- Trac #9481 コメントの誤字を修正
- Trac #9689
pairにpiecewise_constructを追加 - Trac #11170
index_of()のドキュメント間違いを修正 - Trac #11802
flat_multimapのordered_range_t付きinsert()において、非デフォルトのソート順を使用した場合に挿入後の並び順がおかしくなる問題を修正 - Trac #12117
flat_setのordered_unique_range付きの挿入操作において、順序付けされていない範囲が渡されたらアサート失敗するようにした - Trac #12177
vector::priv_merge()のなかでuintptr_tを名前空間修飾せずに使っていたので修正 - Trac #12183 GCC 6.1で
stringの実装がstrict aliasing違反であると見なされていたので修正 - Trac #12256
set<std::pair<int,int>>::insert()がVS2012のデバッグモードでコンパイルエラーになる問題を修正 - Trac #12273
static_vectorとsmall_vectorに、capacity()の定数版であるstatic_capacity静的メンバ定数を追加 - Trac #12286
pmr::flat_mapがコンパイルに失敗する問題を修正 - Trac #12296
dequeのメモリリークを修正 - Trac #12319
flat_setは例外送出なしにムーブ構築できるべき
- 全てのコンテナのデフォルトコンストラクタとムーブコンストラクタの
noexcept式を改訂 - C++17の
insert_or_assign()とtry_emplace()をmapとflat_mapに実装 - C++17の
extract()/insert(node)をmap、multimap、set、multisetに実装
Context
- #12215 一部のフィールドがゼロ初期化されていなかったために、Windows環境でクラッシュする問題を修正
- #12242 MacOS上のIntel C++ Compilerでのビルドエラーを修正
execution_context_v1のスタック巻き戻しを修正
Coroutine
- Coroutine2を推奨するために、Coroutineライブラリを非推奨化
Coroutine2
- #12221
coroutine<>::push_typeのコンストラクタがコルーチン関数を実行しないようにした。Coroutine2の前メジャーバージョンであるCoroutineライブラリでは元々実行しないようになっていた。この問題のために、コンストラクタ時点でコルーチン関数が最後まで到達して実行が終了し、関数呼び出し演算子で改めてコルーチン関数を実行する際に、終了済みの関数実行を再開してしまうという動作になっていた coroutine<>::push_typeの構築時に発生した例外を飲み込まないようにした
DLL
- マングリングされたシンボルとクラスの読み込みを実装。Klemens Morgensternのコントリビュート
detail::aggressive_ptr_cast中の使用されない変数の警告を抑制 pull-request 9- 存在しないセクションを問い合わせることを許可 pull-request 32
- テストとドキュメントの追加
Functional/Forward
- C++11でのコンパイルエラーを修正
Geometry
- 改善
- Union : (いくつかの例外を除いて)出力が正しくなるよう修正。自己接線ポリゴン (self-tangent polygons) や共有エッジ (shared edges) も同様に修正
- SVG :
boost::variantのジオメトリをサポート - SVG : svgに座標をデフォルトで
doubleとして書き込むようにした - 新しいコンパイラでコンセプト名が衝突していたため、このライブラリで定義しているコンセプトの名前空間を名称変更
- 球面ジオメトリと地理的ジオメトリの関係操作と集合操作で使用できる新たな球面交差戦略 (spherical intersection strategy) を追加 (これまでは、全ての座標系でデカルト交差戦略 (cartesian intersection strategy) が使用されていた)
- 解決したチケット
Interprocess
- GitHub PR #27 未定義動作を修正
Intrusive
- バグ修正
- #11476
BOOST_NO_CXX11_DECLTYPEを定義した場合にhas_member_function_callable_with.hppがコンパイル出来なかったのを修正 - #11994 侵入型コンテナに使用するキー抽出器が値でキーを返せるように
- 訳註: これまでは参照を返していたため、値を返す抽出器を用いた場合に寿命の問題があった
- #12184 clangが
-Wdocumentationで発する警告を抑制 - #12190 侵入型リストと
flat_mapの組み合わせがコンパイルできなかったのを修正- 訳註: flat_mapはBoost.Containerが提供する連想コンテナの一種である
- #12229 動的にキーが変化する場合に
intrusive::unordered_set<T>::rehash()が動作しなかった問題の対応- 訳註: 通常キーが変更されることは想定されていないため、
rehash()それ自体に変更は加えられなかった。代わりにfull_rehash()が追加されたのでその様な場合はそちらを使用すること
- 訳註: 通常キーが変更されることは想定されていないため、
- #12245
bstreeが静的なsize_traitsを使用していることによるデータレースを修正
- #11476
Lexical-Cast
- 正しくない静的アサーションを修正 #11759
Log
- 新機能
- ローカルマシンに対するプロセス間ロギングの新たなツールを追加。この実装は、resource name wrapper、プロセス間メッセージキュー、sink backendを含む
- 新たな文字デコレーター
max_size_decorを追加。このデコレーターは、指定の長さまでフォーマッタの出力を制限できる
- バグ修正
- #12178 ロギングストリームが異なるログレコード間でフォーマット設定を維持できるよう修正
- 詳細は changelog を参照
Math
- 新機能
- 全ての特殊関数に対して、(たとえばBoost.MultiPrecisionの
mpfr_float型で)実行時に正しく精度を変更できるようにした。
- 全ての特殊関数に対して、(たとえばBoost.MultiPrecisionの
- 修正
tgamma_delta_ratioについて、baseがdeltaより小さい場合の比較を修正- GCC 4.4でのテスト失敗を修正
Regex
- #12222 いくつかの不正な正規表現を解析したときのバッファオーバーランを修正
- #12152 ライブラリビルドでのICUの検出を修正
- #11940 大文字・小文字の区別を変更した際に発生するバグを修正
- #11988
\x{}式で、intより広い型を許可した (たとえばchar32_tなど)
Optional
- バグ修正
- Trac #12179
optional_fwd.hppを最初にインクルードするとコンパイルエラーになる問題を修正
- Trac #12179
Phoenix
- MSVC 10環境下で非順序連想コンテナの前方宣言に問題があった GitHub PR #18
- 使用されていないプリプロセス済みファイルを削除した GitHub PR #28
switch_のドキュメントミスを修正 #8156- 非順序連想コンテナの設定をクリーンアップ GitHub PR #33
- 未使用のプレースホルダの警告を抑制
- 2引数を受ける数学関数に与える引数が不足していたのを修正
Test
- Boost.Test v3.3
- 詳細はChange logを参照
- 新機能
- データセット駆動の各テストケースが一意な名前を持つようにし、データセットの全てのサンプルテストを同じテストスイートで動かすようにした
- 新たなコマンドラインスイッチ
--loggerでテストロガーを設定できるようにした - 同時に複数のロガーを持てるようにし、それぞれのロガーがログレベルと出力ストリームを持てるようにした
- 新たなロガーとして
JUNITを追加した。これは、Junit/xUnit互換の出力できるストリームである - 環境変数
BOOST_TEST_RUN_FILTERSで複数のテストに対するフィルターを設定できるようにした
- バグ修正
- GitHub PR #81 ESXiコンパイラで
BOOST_TEST_DISABLE_ALT_STACKフラグを使用できるようにした - #8707 Boost.TestからxUnitのXMLを出力したい
- #8834 Boost.TestのレポートとしてXMLとHRFを生成したい
- #11128 BB10/QNXでのビルドエラーを修正
- #11845 データセットのテストケースに一意な名前がほしい
- #11859 実行パラメータ中のカンマに対するハンドリングが間違っていた
- #12024 Android環境に存在しない
abi::__cxa_demangle関数に依存していた - #12093 GCC 4.6.3でのビルドエラーを修正
- #12103 C標準ライブラリの実装uClibc-0.9.33.2で
getchar関数がマクロになっていたため、名前解決に失敗していた - #12224 MSVCでRTTIを無効にするとクラッシュする問題を修正
- #12241 データ駆動テストで
std::tupleの範囲を指定するとコンパイルエラーになる問題を修正 - #12257
test_case_genクラスのコンストラクタで一部のメンバ変数が初期化されない問題を修正 - #12378 Clang 3.8でのコンパイルエラーを修正
- GitHub PR #81 ESXiコンパイラで
Thread
- Trac #12102
BOOST_THREAD_PROVIDES_INTERRUPTIONSが無効なときにcondition_variable_fwd.hppのコンパイルに失敗する問題を修正 - Trac #12120 thread/barrier.hppのパフォーマンスを改善
- Trac #12146
make_exceptional_future()のドキュメントが誤ってmake_exceptional()と記載していた - Trac #12202
shared_lockはC++14に合わせてshared_mutex.hppで定義すべきというリクエストだが、対応せず終了 - Trac #12371 thread/future.hppのコンパイルに失敗する問題を修正
- GitHub #88
upgrade_lockから送出される例外のメッセージにあった誤字を修正 - GitHub #89
upgrade_to_unique_lock<>::operator=()内でムーブしていなかった問題を修正 - GitHub #90
try_lock_wrapper<>::operator=()内でムーブしていなかった問題を修正 - GitHub #91 locks.hppで
shared_lock_guard.hppをインクルードするよう修正 - GitHub #92 MSVC8でのコンパイルエラーを修正
- GitHub #93 変数名が重なっていたことによるClangの警告を修正
- GitHub #94
boost::barrier内で関数の戻り値型が正しく取得できていなかった問題を修正 - GitHub #95
completion_latchのコンストラクタで使用していないテンプレートパラメータがあったので削除 - GitHub #96 async_func.hppをinvoker.hppに名前変更
- GitHub #97
sync_timed_queue<>::pull_until()内でwait_until()の戻り値と比較する型が間違っていたので修正
TypeIndex
ctti_type_indexはC++14環境下においてconstexprとなった- 実際の型名をコンパイル時に
const char*で得ることが出来るようになった - これにより様々な興味深い(例えば以下の様な)事をコンパイル時に実施できる
- 名前空間を検査する
- 辞書順で型名をソートする
- 型がテンプレート型か検査する
- 等々...
- いくつかの例を提供している
- 実際の型名をコンパイル時に
- MSVC環境下において
noexceptを使用した場合の問題、及び型名に空白があった場合の問題を修正した(klemens-morgenstern/developよりpullした) - タイプミスの修正 GitHub PR #7
- CIテストの改善
Unordered
- 非推奨な
boost::iteratorを使用している箇所を削除 unordered_multisetとunordered_multimapの代入時における例外安全性に関する問題を修正- その他の詳細については changelogを参照
Variant
- #7120, #10278, #12155
variantを、variantから継承した型のオブジェクトから構築できるようにした - #5871, #11602
variantのテンプレートパラメータに含まれていない型のオブジェクトが代入されようとした場合に、オーバーロード解決に参加しないようにした (SFINAEフレンドリーにした) - #8555 C++11モードで
variantを暗黙の型変換演算子で返すとコンパイルエラーになる問題を修正 - #11751 非
const参照のオブジェクトを持つvariantで比較演算子がアサート失敗になる問題を修正 - #11696
variant::operator=(variant&&)がGCCの場合だけnoexceptが付いていたので、Clangにも対応 - #12057 Boostのヘッダファイルは、ダブルクォートではなく山カッコでインクルードするようにした
- #12250
BOOST_VARIANT_NO_REFERENCE_SUPPORTマクロと、SFINAEをサポートしていないコンパイラのサポートをやめた - MPL終端イテレータの、暗黙のインスタンス化を抑制した
- 小さな間違いをいろいろ修正 (誤字、インクルード不足)
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.0, 3.8.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.0
- Clang, C++14: 3.5, 3.6, 3.7, 3.8.0, 3.8.1, 3.9.0
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.2.0, 6.1.1
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1
- GCC, C++14: 5.2.0, 5.3.0, 5.4.1, 6.1.1
- Intel: 16.0
- Intel, C++11: 16.0
- Intel, C++14: 16.0
- Windows:
- GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
- GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14, mingw: 6.1.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android:
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4, 6.1
- FreeBSD:
- Clang: 3.4.1, 3.7
- GCC: 4.8.5, 5.4.0, 6.1.1
- QNX:
- QCC: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.5
- Oracle Solaris Studio, C++11: 12.5
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.8
- Clang, c++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8
- Clang, c++14: 3.5, 3.6, 3.7, 3.8, 3.9
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 4.8.4, 5.2.0, 6.1.1
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.3, 5.2.0, 6.1.1
- GCC, C++14: 5.2.0, 5.3.0, 5.4.1, 6.1.1, 7.0.0 (experimental)
- Intel: 16.0
- Intel, C++11: 16.0
- Intel, C++14: 16.0
- OS X:
- Apple Clang: 7.3.0
- GCC: 6.1.0
- Windows:
- Clang: 3.8.1
- GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
- GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0
- GCC, cygwin: 5.4.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android:
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4, 6.1
- FreeBSD:
- Clang, C++11: 3.4.1, 3.7.0
- GCC, C++11: 4.8.5. 5.4.0, 6.1.1
- Haiku:
- GCC, C++11: 5.4.0
- QNX:
- QCC: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.5
- Oracle Solaris Studio, C++11: 12.5