本家リリースノート:
- 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