最終更新日時:
が更新

履歴 編集

Boost 1.59.0リリースノート

本家リリースノート:

リポジトリは以下:

リポジトリからのビルド方法は、egtraさんのブログを参照:

既知の不具合

  • #11549 Logライブラリに、いくつかのロギング文のコンパイルが通らない問題がある。この問題は、以下のコミットで修正された (https://github.com/boostorg/log/commit/7da193fde1a9c1bc925ee980339f4df2e1a66fa7)

新ライブラリ

  • Convert
    • 拡張性のある型変換フレームワーク
    • Vladimir Batov作
  • Coroutine2
    • C++14で記述されたコルーチンライブラリ
      • 訳註: 既に存在するBoost.Coroutineはdeprecatedとなり、メンテナンスのみ行うという宣言がOliverよりされている
    • Oliver Kowalke作

更新ライブラリ

Container

  • GitHub #26: stable_vector::capacity()のバグを修正
  • GitHub #27: stable_vector::index_ofのdoxygenコメントを修正
    • kariya-mitsuruに感謝
  • #11380: gcclibc++の組み合わせ下においてstd_fwd.hpp内のコンテナの前方宣言が正しくなかったのを修正
  • #11388: Visual Studio 2010においてboost::container::list::emplace_backが壊れていたのを修正
  • #11339: VC12 LNK2005 errorboost::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 Sequencefusion::(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_iteratorbegin()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ジオメトリのサポートを追加。

改善点

  • rtreeconst_query_iteratorを、ForwardIteratorの分類にした。
  • multi-point周りのbufferの、bufferのパフォーマンスを大幅に改善した。

破壊的変更

  • buffer side strategyが、boolの代わりにerror_codeを返すようになった。site strategyを自分用にカスタマイズするのであれば、これに適応させる必要がある。

解決したチケット

  • #11113 rtreeBOOST_FOREACHで回せるようにする
  • #11232 relate()機能のリクエスト
  • #11236 整数座標系で、centroid()の結果が間違っている
  • #11268 intersection()multi_linestringboxに対する組み合わせのレギュレッションを修正。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

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>&&)
  • #11229 vectorがムーブのみ可能な型に対してmemcpyしていた問題を修正

Multi-index

  • ranked indicesを追加
  • メンテナンス上の修正

Predef

  • predef_check機能のさまざまな問題を修正
  • Oracleからの最新バージョンのコンパイラに合わせて、SunProの検出機能を更新
  • Boost.Build側に対するpredef_check式に、andorの論理演算子を追加
  • 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を使用して、ドキュメントのリファクタと書き直しを行った。

取り組んだ問題

  • #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

翻訳

Kohei Takahashi, Akira Takahashi