本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_57_0.qbk
- http://www.boost.org/users/history/version_1_57_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
更新ライブラリ
- Any
- Asio
- Circular Buffer
- Config
- Container
- Coroutine
- Flyweight
- Geometry
- Interprocess
- Intrusive
- Iterator
- Lexical Cast
- Math
- Move
- Multi Array
- Multiprecision
- Multi Index
- Preprocessor
- Thread
- Type Index
- Type Traits
- Units
- Unordered
- Utility
- uBLAS
Any
- RTTIは必須ではなくなった(RTTIのエミュレートにはType Indexが使用される)。
- #8958を修正。
- 訳者註:cv修飾子を無視したany_castが可能になっており、未定義動作を引き起こす原因となっていた。
Asio
- FreeBSDで動作する
kqueueリアクタを修正。#10606 - Mac OS上でシリアルポートを読む際に、
kqueueリアクタがビジーループに陥るのを修正。#10496 - 読み込み専用ファイル記述子を使用した場合の
kqueueリアクタの問題を修正。#10367 /dev/pollリアクタを使用した場合のコンパイルエラーを修正。#10572- Windowsバックエンドにおいて、非推奨の
WSASocketAをWSASocketWに置き換えた。#10534 - Visual C++ 2013でのいくつかの警告を修正。#10376
- WinRT環境におけるバイトオーダー変換関数の整数型を修正。#10539
use_futureとspawn()はasio.hppをインクルードしただけでは利用できない為、ドキュメントを修正。#10567asio::strandは非推奨となった。代わりにasio::io_service::strandを使用すること。
Circular Buffer
- Boost.Moveの
move_if_noexceptを使用した際のいくつかの警告を修正。 #7888
Config
BOOST_HAS_PRAGMA_DETECT_MISMATCHマクロを新規追加。- コンパイラが
#pragma detect_mismatch("name", "value")をサポートするかを調べられる。
- コンパイラが
Container
initializer_listのサポートを追加。Robert Matusewiczによる貢献。- 後方に拡大可能なアロケータを使用する場合の
vectorにおいて、二重破棄の問題を修正 - バグ修正
- Trac #10263 AIX 6.1環境において、
sched_yield()関数がスコープ外になっていた問題を修正 - GitHub #16 不完全型コンテナのイテレータを修正。Mikael Perssonに感謝。
- Trac #10263 AIX 6.1環境において、
Coroutine
- スタック用に確保した領域がスタック用であるとValgrindへ登録することができるようになった。
- 訳者註:
- 通常Valgrindはコンテキストスイッチが発生したことを知ることができず、スイッチ後にスタックトレースを出力するとSegfaultを起こすが、これを回避することができるようになる。
- 通常この機能は無効化してビルドされる。有効にするにはビルド時にBoost.Buildへ
<valgrind>onを渡す必要がある(コマンドラインではvalgrind=on)が、生成物利用する際にはABI互換性に注意する必要がある。
- 訳者註:
- MSVCにおいて、asymmetric_coroutine.hppで定義されているシンボルが重複するためリンクエラーになる問題を修正。 #10386
begin(...pull_coroutine< R > & c)の呼び出しが曖昧になる問題を修正。 #10536
Flyweight
- Boost.Serializationによるシリアライズのサポートを追加。
- 1.56にて
flyweightのデフォルトコンストラクタはexplicit指定されたが、いくつかの初期化方法で問題が見つかった。そのため以前のexplicit指定されないコンストラクタを復帰させた。 #10439
Geometry
改善
rtreeのメンバ関数insert()、remove()、count()のパラメータとして、value_typeに変換可能な型をサポート。
解決したチケット
- #8402, #10668 暗黙変換の警告
- #9354 非デカルト座標系(non-cartesian coordinate systems)におけるwinding strategyの
within()とcovered_by()のバグ - #10177 インクルード漏れ
- #10345 いくつかの座標系型で
distance()のコンパイルに失敗する - #10398 回転の計算で、バッファの近接チェックが間違っている
- #10421 spherical CSのpoint-box間の
distance()が不正 - #10615
rtreeのコンストラクタに対する機能リクエスト - #10643 大きな座標での
point_on_surface()の結果が不正
バグ修正
- いくつかの、アルゴリズムのバッファのバグを修正
- CCW Polygon (
extreme_points())に対するpoint_on_surface()のバグと数値的な問題を修正(Matt Amosに感謝) point_on_surface()とpoint_on_border()の交換によるA/Aのdisjoint()のバグを修正(Matt Amosに感謝)convex_hull()が結果として重複したpointを返す問題を修正。非常に少ないpoint(1〜2)を入力として与えると発生する。- 大きな座標での
centroid()が不正確であった問題について、pointの変換を修正(#10643のチケットに関連) for_each_segment()が、開いているGeometryの最後のsegmentを考慮していない問題を修正
Interprocess
unique_ptrは削除された。現在boost::interprocess::unique_ptrはBoost.Moveから提供される一般化されたboost::movelib::unique_ptrを指す。- この実装は標準の
std::unique_ptrに近く、またよくメンテナンスされている。
- この実装は標準の
- バグ修正
- #10262 AIX 6.1における変数
hzのバグを修正。 - #10229
interprocess\detail\os_file_functions.hpp内でのコンパイルエラーを修正。 - #10506
create_or_open_file内での無限ループを修正。 - pull request 11
BOOST_USE_WINDOWS_Hが定義されている際のコンパイルエラーを修正。
- #10262 AIX 6.1における変数
- リファレンスを改善するためにDoxygenのマーカを整理。
Intrusive
- 実験的なノードチェッカを追加(Matei Davidからのコントリビュート、ありがとう!)。
- C++14のNull Forward Iteratorsを実装。
- バグ修正
- pull request 12 MSVC14の警告を修正(
C4456: declaration of 'x_parent_right' hides previous local declaration)。 - #10520
intrusive/detail/utilities.hppでの暗黙の型変換による警告を修正。 - #10469
optimize_multikeyを使用したunordered_multisetから削除する際に無限ループに陥るのを修正。
- pull request 12 MSVC14の警告を修正(
Iterator
- ほとんどのコンポーネントを、
boost::iterators名前空間に移動した。後方互換性のため、従来のboost名前空間でもアクセスできる。 - イテレータの演算子が、条件付きでイテレータのカテゴリを元に定義するようにした。
- ライブラリの内部コンポーネントを一部を
publicにした(たとえばminimum_category)。
Lexical-Cast
Math
- 超指数分布を追加。
- 不完全なガンマ関数によるいくつかのオーバーフローを修正(Rocco Romeoに感謝)。
a = b = 0.5の時の不完全なベータ関数の導関数によるバグを修正。- これはいくつかの非心分布へも影響を与える。#10480を参照せよ。
round()関数のいくつかのコーナーケースを修正。- 標準ライブラリのサポートが不完全な場合、cstdfloat.hppによる80bit浮動小数点型のサポートを行わない。
- 訳者註:FreeBSD等、いくつかの環境では
long double型へのサポートが不完全であり、まともな精度を期待できないためである。
- 訳者註:FreeBSD等、いくつかの環境では
Move
- スマートポインタである
unique_ptrを実装(素晴らしい実装とテストをくれたHoward Hinnantに感謝)。 move_if_noexceptを追加(Antony Polukhinに感謝)。- バグ修正
- #9785
boost/move/core.hppでのIntel ICCの警告を修正。 - #10460 緩い例外指定によるコンパイルエラーを修正。
- pull request 3 右辺値参照が利用できない場合、コピーコンストラクタを消去しないように変更。
- #9785
Multi-Array
- Clangにおいてfriend宣言で警告が出るのを修正(Marcel Raadからのコントリビュート)。
Multiprecision
- 有理数から浮動小数点数への変換の際に、近い方へ丸め込む様に変更。
- 浮動小数点数から有理数への変換を改善。
cpp_bin_floatの指数関数で稀に発生するバグを修正。- 多くの些細なドキュメントの問題を修正。
Multi-Index
std::tupleが利用可能なとき、複合キーの検索に使用することが可能になった。- 従来のBoost.Tupleも後方互換性のためにサポートされている。
- 参照: Tutorial - Key extraction - 1.57.0
Preprocessor
is_begin_parensとremove_parensを追加。- 配列と同等の機能をタプルに追加。
- 空のタプルデータに関するVC++の問題を修正。
is_emptyの内部実装を、可変引数マクロが使用可能な場合に、より優れた実装としてそれによる実装に切り替えるようにした。- 可変引数マクロのサポートを、GCCと同様になるようClangの方を更新。
- 新たな機能についてのドキュメントを追加。
Thread
新機能
- Synchro: コンパイラがサポートする場合、汎用ロックアルゴリズムで可変長テンプレートを使用する。 #6227
- Synchro: 並行キューにviewを追加。 #10298
- Async:
generic_executor_refを追加。 #10300 make_valid_futureを追加。 #10552
バグ修正
- MSVCにおいて、
call_onceが正しくない組み込み関数を使っていたのを修正。 #6782 - システム時刻が巻き戻った場合に、
boost::thread::sleep()がハングしていたのを修正。 #6787 - スレッド中で
this_thread::sleep_forが_steady_になっていなかったのを修正。 #7665 future::fallback_toがassertで落ちる問題を修正。 #9307future::asyncがlambdaの呼び出しで例外を投げて終了するのを修正。 #9308test_4648_libが失敗するのを修正。 #9310promiseとfutureが値の格納に指定されたアロケータを使用していなかったのを修正。 #9425futureの単体テストがget()/pthread_cond_wait()でハングするのを修正。 #9558- [windows]
basic_timed_mutex::try_lock_until及びcondition_variable::wait_untilに短い期間を渡すと無限に(若しくは無限に近いぐらい)待ち続けるのを修正。 #9787 - [windows] システム時刻が1970年以前の場合に
boost::condition_variable.timed_wait()が例外を送出していたのを修正。 #9880 - GCC 4.4のバグを回避。 #10159
thread_specific_ptrでのvoid *をサポート。 #10196- _Boost.Thread 1.56 RC1_が_MinGW_でコンパイル出来ないのを修正。 #10296
- _Boost.Thread 1.56 RC1_が_armhf_でビルドするとハングする。 #10297
- 訳者註:このバグはClang 3.4固有のものであり、Boost.Threadは何も変更されない。
boost::promise<T>::set_value(const T&)のオーバーロードがC++03モードで正しく提供されていないのを修正。 #10340when_all/when_anyのドキュメントがないのを修正。 #10425when_allに_deferred_なfutureを渡すと直ちに制御が戻ってきてしまうのを修正。 #10426when_anyに_deferred_なfuture若しくは_ready_状態にあるfutureを渡した際に、他の_deferred_なfutureを実行していなかったのを修正。 #10427- Boost.Moveが提供する
unique_ptrを使用するように変更。 #10428 - 未実装だった
when_all/when_anyがtupleを返す場合を実装。 #10465 BOOST_THREAD_MOVABLE_ONLY<T>なクラスがis_copy_constructible<T>::value == falseを満たさないのを修正。 #10476boost/thread/future.hppのデータレースを修正。 #10478pthread/condition_variable_anyのコンストラクタがpthread_cond_initのエラーコードで間違った値を返していたのを修正。 #10529shared_future<R>::thenをconstにした。 #10563
Type-Index
Type-Traits
- 新しいトレイトとして
is_copy_assignable及びis_finalを追加。
Units
- 新たな単位系を追加。
<boost/units/systems/information.hpp>ヘッダに、以下の単位が含まれる:bitbytenathartleyshannon
- 2進接頭辞の大きさ単位として、以下のIEC接頭辞を追加:
kibimebigibitebipebizebiyobi
- MSVC-14での、NaNの出力を修正
- C++11の
numeric_limits機能であるdigits10とlowestをサポート - 警告を修正
Unordered
iteratorにおけるpointerのtypedefを修正。 (#10672)Coverityによる警告を修正。 (pull request 2)
Utility
- 距離を受け取る
next()とprior()を再実装した。- 距離が
unsigned、若しくはどちらも整数であっても正しく動作する。 - これは第1引数の演算子のサポートの仕方で適切な実装を選択している。
- 距離が
uBLAS
- 新たに2つの型、
matrix_rowとmatrix_columnファサードを追加。これは、行列のデータに行の配列、列の配列としてアクセスできるようにするものである。 - 小さな機能として、固定サイズのコンテナを追加:
fixed_vectorとfixed_matrix。実装にstd::arrayを使用しているため、C++11が必要。 banded_matrixのフォーマットを、標準BLASにマッチするよう修正(#7549)matrixとvectorのインタフェースに、C++11のcbegin()、cend()、crbegin()、crend()を追加。- ドキュメントの配布を容易にするために、doxygenのドキュメントを削除。
- MSVCでの未使用パラメータ警告を修正
- uBLASの開発用フォルダの構成を変更した(ユーザーのライブラリに影響はない)
- さまざまなコンパイラでの警告、およびコンパイルエラーについて、大規模な修正を行った。いくつかの、古いコンパイラのための警告や非互換を解決するのは難しかったが、uBLASのコンパイルは非常に整理された状態になった。
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.0, 3.1, 3.2, 3.3, 3.4
- Clang, C++14: 3.5
- GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.8.2
- GCC, C++98: 4.9.1
- GCC, C++11: 4.4.7, 4.8.2, 4.8.3, 4.9.1
- GCC, C++14: 4.9.1
- Intel: 13.1, 14.0
- Intel, C++11: 13.1, 14.0
- QCC: 4.4.2
- OS X:
- Apple Clang: 6.0
- Apple Clang, C++11: 6.0
- Apple Clang, C++14: 6.0
- GCC: 4.2.1, 4.9.1
- Intel: 12.0
- Windows:
- GCC, mingw: 4.4.0, 4.4.7. 4.5.4, 4.6.3, 4.7.2, 4.7.3, 4.8.0, 4.8.2, 4.9.0
- 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.2
- Clang, C++14: 3.5.0, trunk
- GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.8.2, 5.0 (experimental)
- GCC, C++11: 4.4.7, 4.8.2, 4.8.3, 4.9.1
- GCC, C++14: 4.9.1
- Intel: 11.1, 12.1, 13.0, 13.1, 14.0
- Intel, C++11: 13.1, 14.0
- OS X:
- Apple Clang: 6.0
- Apple Clang, C++11: 6.0
- Apple Clang, C++14: 6.0
- Clang: trunk
- Clang, C++11: trunk
- GCC: 4.2.1, 4.9.1
- Intel: 12.0
- Windows:
- GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.0, 4.8.2, 4.9.0
- Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC: 4.4.2