本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_59_0.qbk
- http://www.boost.org/users/history/version_1_59_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
既知の不具合
- #11549 Logライブラリに、いくつかのロギング文のコンパイルが通らない問題がある。この問題は、以下のコミットで修正された (https://github.com/boostorg/log/commit/7da193fde1a9c1bc925ee980339f4df2e1a66fa7)
新ライブラリ
- Convert
- 拡張性のある型変換フレームワーク
- Vladimir Batov作
- Coroutine2
- C++14で記述されたコルーチンライブラリ
- 訳註: 既に存在するBoost.Coroutineはdeprecatedとなり、メンテナンスのみ行うという宣言がOliverよりされている
- Oliver Kowalke作
- C++14で記述されたコルーチンライブラリ
更新ライブラリ
- Container
- Context
- Coroutine
- Fusion
- Geometry
- Interprocess
- Intrusive
- Lexical Cast
- Log
- Move
- Multi-index
- Predef
- Property Tree
- Program Options
- Test
- TypeIndex
- Variant
Container
- GitHub #26:
stable_vector::capacity()
のバグを修正 - GitHub #27:
stable_vector::index_of
のdoxygenコメントを修正- kariya-mitsuruに感謝
- #11380:
gcc
とlibc++
の組み合わせ下においてstd_fwd.hpp
内のコンテナの前方宣言が正しくなかったのを修正 - #11388: Visual Studio 2010において
boost::container::list::emplace_back
が壊れていたのを修正 - #11339:
VC12 LNK2005 error
がboost::container::adaptive_pool
で起きていたのを修正
Context
- #11223
std::integer_sequence
サポートのチェックを追加 BOOST_USE_WINFIBERS
をdefineすると、execution_context
の内部でWindowsのFiberを使用するようにした- 32ビットWindows上のMinGWでのアセンブラをサポート
Coroutine
- #10978 不要なセミコロンを削除
- #11230
coroutine_error
のエラーメッセージがダングリングポインタとなっていたのを修正 - #11234
boost::range::algorithms
との組み合わせでコンパイルエラーとなっていたのを修正 - #11356
BOOST_USE_SEGMENTED_STACKS
でコルーチンがセグメンテーションフォルトしていたのを修正
Fusion
- 新しいコンセプトが追加された。シーケンスには
Unbounded Sequence
、イテレータにはUnbounded Iterator
が追加された (pull-request 85)- 現在、
Unbounded Sequence
はfusion::(value_)at(_c)
及びfusion::(value_)at_key
の挙動に影響を与える Unbounded Iterator
は現在効果を持たない(今後のリリースのために予約されている)- 詳細はそれぞれ次のドキュメントを参照のこと:Unbounded Sequence及びUnbounded Iterator
- 現在、
fusion::list
がC++11の可変長テンプレートに対応した (pull-request 84)- バグ修正
<utility>
のインクルード忘れを修正 (#11161)- いくつかの
constexpr
のサポートを差し戻した (1.58.0でのリグレッション, #11211, #11267) - インクルード忘れによる
fold
のコンパイルエラーを修正 (#11249) - 空の構造体がアダプトできなくなっていたのを修正 (1.58.0でのリグレッション, #11269)
- 古すぎる(そして既に正しくない)回避策を削除。これはMSVC-8もしくはそれ以前にのみ影響がある (pull-request 78)
fusion::list
から派生したシーケンスをコピーする際に起こっていたコンパイルエラーを修正 (1.58.0でのリグレッション, pull-request 87)fusion::tuple
をコピーする際のコンパイルエラーを修正 (#11141)- GCC 4.6用の回避策を追加 (#11517)
Geometry
新機能
- Boost.Rangeをサポートするために、
rtree
に、const_iterator
、begin()
、end()
を追加。 - C++11の
initializer_list
をサポート。 disjoint()
とintersects()
に、以下の組み合わせサポートを追加:- multipoint/linestring
- multipoint/multilinestring
relate()
、relation()
アルゴリズムを追加。intersection()
に、pointlikeとlinearの組み合わせサポートを追加。difference(pointlike, linear)
の実装を追加。- 新アルゴリズム
is_empty()
を追加。これはジオメトリが空集合を持つ場合にtrue
を返す。 - spherical equatorial座標系の
envelope()
アルゴリズムに、pointlikeとlinearの組み合わせサポートを追加。 - geographic座標系の
envelope()
アルゴリズムに、pointlikeジオメトリのサポートを追加。
改善点
rtree
のconst_query_iterator
を、ForwardIteratorの分類にした。- multi-point周りのbufferの、bufferのパフォーマンスを大幅に改善した。
破壊的変更
- buffer side strategyが、
bool
の代わりにerror_code
を返すようになった。site strategyを自分用にカスタマイズするのであれば、これに適応させる必要がある。
解決したチケット
- #11113
rtree
をBOOST_FOREACH
で回せるようにする - #11232
relate()
機能のリクエスト - #11236 整数座標系で、
centroid()
の結果が間違っている - #11268
intersection()
のmulti_linestring
とbox
に対する組み合わせのレギュレッションを修正。1.57と1.55でコンパイルが通らなかった。 - #11332 極端な座標値の
buffer
でアサーションに失敗する - #11346 segment iteratorが参照ではなく値を返すため、Rangeで動作しなかった。
- #11436
sym_difference(py1, py2, mpy)
が間違ったmultipolygon
を返す。
バグ修正
Buffer
:intersection()
を計算する、より強力な方法を使用することによって、バッファ生成時のいくつかのエラーを修正。- 2つのセグメントの交差(intersection)において、セグメントの選択がIPから行われていたのを修正。segment-pointの近傍のpoint、もしくは他の最短のセグメントを選択するようになった。これは、(ほとんど発生しない)無効な出力ポリゴンを作る小さな三角形の生成を回避する。
- 整数グリッドに丸める代わりに、roundの再スケーリングを行うようにした。(この修正は、これまでのジオメトリ生成にいくつかの影響がある)
detail::has_spikes()
の、無限ループになる可能性があった部分を修正した。(このループは、渡されたpointがNaN座標を持っているときに起こり得た)
Interprocess
- #5139
boost::interprocess::basic_vectorstream
の初期位置が不正だったのを修正 - GitHub Pull #19 例外オブジェクトの可視性を修正
- Romain-Geisslerに感謝
Intrusive
- mapとmulti_mapに似たインターフェースを実装
- テンプレートの実体化を減らすためにハッシュテーブルを使うコンテナをリファクタリング
Lexical Cast
- 警告を修正
- メタプログラムを整理し、簡易化した(Edward Diener氏に感謝)
Log
全体的な変更
- シンボル可視性をサポートし、このライブラリの内部的なシンボルを隠した。
- 破壊的な変更 : このライブラリの下層の型(underlying types)の管理に、Boost.TypeIndexを使用するようにした。これによって、以下のpublicインタフェースが影響を受ける:
- このライブラリでは、問題のある型の説明のために
invalid_type
例外を送出しているが、それにtypeindex::type_index
が付加されるようになった。これまでは、type_info_wrapper
型を使用していた。 type_info_info
例外のエラー情報には、type_info_wrapper
の代わりにtypeindex::type_index
を含めるようになった。attribute_value::get_type()
関数は、type_info_wrapper
の代わりにtypeindex::type_index
を返すようになった。また、ユーザー定義の属性値の実装も同様に、変更する必要がある。(attribute_value::impl::get_type()
仮想メンバ関数も、typeindex::type_index
型を返すようになった)
- このライブラリでは、問題のある型の説明のために
type_info_wrapper
コンポーネントは非推奨となり、詳細のリリースから削除される予定。代わりに、Boost.TypeIndexを推奨する。- 以前から非推奨だった、以下のヘッダを削除:
boost/log/utility/intrusive_ref_counter.hpp
boost/log/utility/explicit_operator_bool.hpp
boost/log/utility/empty_deleter.hpp
- #11446 OpenBSDのビルドをサポート
- #11398 イベント同期プリミティブの内部実装に、非同期ログを使用するよう改善した。
バグ修正
- #11190 いくつかのケースで、
attribute_value_set::insert()
関数とattribute_value_set
のコンストラクタがおかしい動作をしていたのを修正
さらなる詳細は、Changelogを参照。
Move
unique_ptr
の変換コンストラクタを、C++03では値でパラメータを受け取るよう変更した。- C++03 :
unique_ptr(unique_ptr<U, E>)
- C++11 :
unique_ptr(unique_ptr<U, E>&&)
- C++03 :
- #11229
vector
がムーブのみ可能な型に対してmemcpy
していた問題を修正
Multi-index
- ranked indicesを追加
- メンテナンス上の修正
Predef
predef_check
機能のさまざまな問題を修正- Oracleからの最新バージョンのコンパイラに合わせて、SunProの検出機能を更新
- Boost.Build側に対する
predef_check
式に、and
とor
の論理演算子を追加 BOOST_ARCH_PARISC
の綴りを修正MAKE_YYYYM
マクロの、月を正しく制限するよう修正
Property Tree
- 新しいJSONパーサーで、Unicodeを完全サポートした。
- 破壊的変更 新しいパーサーでは、JSONファイル中のコメントや文字列連結をサポートしない。古いパーサーの非標準機能が削除されたため、それらの機能に依存したコードが壊れる可能性がある。
Program Options
- MSVCとMinGW環境下において、
dllexport
が無いことによる警告とコンパイルエラーを修正 (Daniela Engert, Marcel Raad) - 未初期化のフィールドを修正 (Zoey Greer)
- 暗黙の値を持ったオプションがそれ以上トークンを処理するのを抑止 (Michael John Decker)
- 複数のトークンを受け取るオプションの上限を32k個ではなくintのmaxに緩和 (Hans Hohenfeld)
- 訳者註: intのmaxではなくunsigned intのmaxが使用される
- コードの整形とドキュメントの修正 (Jurko Gospodnetić, Lauri Nurmi)
no-rtti
の最低限のサポート (Minmin Gong)- 環境変数のポインタをendの次までインクリメントしてしまうのを修正 (Vladimir Prus)
Test
バージョン3に、メジャーアップデート
新機能
- 汎用的なテストマクロ
BOOST_TEST
を追加。- たとえば、
BOOST_CHECK_EQUAL(a, b)
の代わりにBOOST_TEST(a == b)
を使用できる。 - このマクロには、任意の条件式を指定できる。ただし、
||
演算子および&&
は直接使用できないため、BOOST_TEST((true || false))
のように丸カッコで条件式を囲む必要がある。
- たとえば、
-
データ駆動のテストケース(パラメタライズドテスト)
void test1( int i ) { BOOST_TEST( i%2 == 0 ); if( i%3 == 0 ) { throw 124; } } BOOST_AUTO_TEST_CASE( test_case1 ) { … int test_data[] = { 1, 2, 2 }; // パラメータ // 各パラメータをtest1()関数に渡してテストを実行 test->add( BOOST_PARAM_TEST_CASE( &test1, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); }
- テストの細かな挙動を制御するための「属性(attribute)」機能を追加
- たとえば、論理グループ化、テストの依存関係、テストの有効化・無効化などに使用する
- CLIから学んだ、色付けのための
colour_output
、テストケースのリストアップのためのlist_content
、および拡張ユニットテストフィルタリング(否定、ラベル)を追加 - Quickbookを使用して、ドキュメントのリファクタと書き直しを行った。
- テストの細かな挙動を制御するための「属性(attribute)」機能を追加
取り組んだ問題
- #2018 「実行時パラメータのリファレンス」章のドキュメントにおける、英語文法的な間違い、およびコマンドライン引数名の間違いを修正
- #2450 浮動小数点数の比較アルゴリズムに関するドキュメントで、数式が正しく表示されない問題を修正
- #2717
BOOST_<level>_EQUAL_COLLECTION
ドキュメントの誤字を修正 - #2759 new-year-resolution.htmlドキュメントの誤字を修正
- #3182 メモリリークの検出レポートを出力するファイルを、指定できるようにした
- #3316
init_tests_func()
からログを出力しようとするとアクセス違反が起こる問題を修正 - #3392
BOOST_TEST_PASSPOINT
マクロのドキュメントが間違っていたので修正 - #3402 ドキュメントに記載されているマクロ名が間違っていたので修正(#2717と重複)
- #3445 ドキュメントのリンク間違いを修正
- #3463
BOOST_<level>_GT
のドキュメントで>=
を使用すると書いていたため、>
での比較に修正 - #3542 コマンドライン引数の名前が
build_info
となっていたが、正しくはdetect_memory_leak
。(#2018と重複) - #3592
under_debugger()
が無限ループする問題を修正 - #3595 マクロ名の誤字を修正(#2759と重複)
- #3623 マクロ名の誤字を修正(#2759と重複)
- #3664
SIGCHLDP
が致命的なエラーとなることを考慮するようにした - #3784 Execution Monitor Compilationのドキュメント間違いを修正
- #3785 Program Execution Monitor implementationのドキュメント間違いを修正
- #3811 グローバル名前空間で定義するCリンケージの関数に、名前衝突を避けるために
boost_
プレフィックスを付けた - #3834 HTMLが正しく表示されない問題を修正(#2450と重複)
- #3896 コマンドライン引数の説明が間違っていたので修正
- #3932
BOOST_<level>_GT
の説明が間違っていたので修正(#3463と重複) - #3938 ドキュメントのマクロ名が間違っていたので修正
- #3964
BOOST_<level>_CLOSE_FRACTION
のドキュメントが間違っていたので修正 - #3978 テストログのファイルへのリダイレクトが失敗する問題を修正
- #3979
<boost/test/exception_safety.hpp>
がさらなるインクルードを要求する問題を修正 - #4161 ドキュメントのスペルミスを修正
- #4275 ドキュメントの間違いを修正(#2717と重複)
- #4389 依存するテストの実行を有効にできるようにした
- #4434 ドキュメントの誤字
BOOST_AUTO_EST_CASE
を修正 - #4587 ドキュメントのリンク間違いを修正
- #4806 ドキュメントのリンク間違いを修正
- #4911 例外発生時に、例外の本来の型名を出力するよう修正
- #4923 ドキュメントのサンプルコードにセミコロンが不足していたので修正
- #4924 ドキュメントの小さな誤字を修正
- #4982 ドキュメントに記載されている、作者Gennadiy Rozentalのメールアドレスが間違っていたので修正
- #5008 テストケースの開始と終了のチェックポイントを挿入
- #5036 メモリリークのレポートを、VCでは
stdout
に対して書き込んでいたが、strerr
に書き込むよう修正 - #5262 run_testに、否定(negation)のサポートを追加
- #5374 VS2010で、エラーのリストが表示されない問題を修正
- #5412 内部で使用しているXMLフォーマッターの、サブシーケンスを処理する文字列が間違っていたので修正
- #5563 グローバルなフィクスチャの中でテストマクロを使用するとクラッシュする問題を修正
- #5582
BOOST_AUTO_TEST_CASE_TEMPLATE
のメモリリークを修正 - #5599 ドキュメントの導入がイケてない
- #5718 単体テストフレームワークのソースコード例へのリンクが壊れていたので修正
- #5729
fpt_limits
の中でstatic_cast
が不足していたので修正 - #5870 警告の制御にスタックが使われていなかったので修正
- #5972 出力ストリームにテストツリーをテキストでダンプするオプションをサポート
- #6002 テストログのファイルへのリダイレクトが失敗する問題を修正(#3978と重複)
- #6071 Boost Test (Boost 1.46.0) + GCC 4.6.1で、
operator[]
のオーバーロードが曖昧であるというコンパイルエラーが発生していたので修正 - #6074 警告をエラーとして扱うオプションが、Boost.Testのリリースモードで扱えない問題を修正
- #6161 SunOS環境で、
putenv()
の宣言がコンパイルエラーになっていたので修正(#6766と重複) - #6766 config.hppの
putenv()
が間違っていた - #6712 GCCの警告を除去
- #6748 ドキュメントのリンクが間違っていたので修正
- #7046 例外のエラーメッセージが512文字を超えていたので修正
- #7397 Boost.Testが、1.48.0で非推奨になったBoost.Timerのクラスを使っていたので、新しいクラスを使用するよう更新した
- #7410 テストケースが
__FILE__
と__LINE__
をキャプチャするようにした - #8862 ドキュメントの誤字を修正
- #9179 ドキュメントのリンクが壊れていたので修正(const_string.hpp/const_string_test.cppが見つからない)
- #9272
BOOST_<level>_GT
のドキュメントバグを修正 - #9390
BOOST_TEST_DONT_PRINT_LOG_VALUE
が、一部のマクロに対して使用できなかった問題を修正 - #9409 いくつかのサンプルコードが不足していたので修正
- #9537 const_string_testのサンプルコードが失敗していたので修正
- #9539 浮動小数点数の比較アルゴリズムに関するドキュメントで、数式が正しく表示されない問題を修正
- #9581 浮動小数点数の比較アルゴリズムに関するドキュメントで、Squassabiaへのリンクが壊れていたので修正
- #10318 ドキュメントの小さな修正
- #10888 アサーションの失敗が、VS 2010、VS 2012、VS 2013でエラーウィンドウに表示されない問題を修正(重複)
- #11054 Expression Templateを有効にすると、多倍長の浮動小数点数に対する比較が失敗する問題を修正
- #11347
DS
識別子が原因で、doc/examples/dataset_example*.cpp
のテストが失敗していたので修正 - #11358 signedとunsignedの比較で警告が出ていたので修正
- #11359
BOOST_CHECK_EQUAL_COLLECTIONS
マクロで、出力演算子の制御ができない問題を修正(#9390と重複)
TypeIndex
- コンパイル時間とモジュール性を改善するために、いくつかのBoostライブラリへの依存関係を削除
- テストの警告を修正し、メンテナンス上の改善をいくつか行った
Variant
- #11196, #11283 element_index.hppでの、インクルード不足を修正
- #11251, #11285 C++14での
aplly_visitor
のサンプルコードとconst参照を修正 get<reference>(variant_variable)
のコンパイル時チェックを緩和(Nicolas Cornu氏に感謝)
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.4
- Clang, C++14: 3.6
- GCC: 4.4.7, 4.8.2, 4.9.3
- GCC, C++11: 4.4.7
- GCC, C++14: 4.9.3
- Intel: 15.0
- Windows:
- Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android:
- Clang: 3.6
- GCC: 4.8, 4.9
- SunOS:
- Sun: 6.0
- QNX:
- QCC: 4.4.2
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.1, 3.2, 3.3, 3.4
- Clang, C++14: 3.6, 3.7
- GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 5.1.0, 6.0.0
- GCC, C++11: 4.4.7
- GCC, C++14: 4.9.3, 5.1.1
- Intel: 15.0
- Android:
- Clang: 3.6
- 4.8, 4.9
- FreeBSD:
- Clang: 3.4.1
- GCC: 4.8.5, 5.1.0, 6.0.0