最終更新日時:
が更新

履歴 編集

Boost 1.60.0リリースノート

本家リリースノート:

リポジトリは以下:

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

Hanaのリリースは延期

時間的な制約により、Hanaのリリースは、Boostの以降のリリースに延期となった。

これによって、HanaがBoostの一部として正式にリリースする前に、いくつかの既知の問題に対処できる。詳細はメーリングリストを参照。

http://article.gmane.org/gmane.comp.lib.boost.devel/263964

Boost.DLLのリリースは延期

めずらしいツールセットとプラットフォームのサポートを提供するために、Boost.DLLのリリースは、Boostの以降のリリースに延期となった。

これによって、boost::dll::shared_libraryインスタンスのコピー構築とコピー代入の機能も追加されてより良いテストができるようになり、非デフォルトの呼び出し規約の関数をインポートするサンプルも提供される。

このライブラリの最新バージョンと開発ドキュメントは、以下のリポジトリにある:

Windowsユーザーへの注記

このリリースでのBoostは、コンパイラが最新のWindows SDKをサポートしていてWindows XP以外の場合に、Windows Vista/Windows Server 2008をデフォルトコンパイルとする。古いバージョンのWindowsでは、デフォルトのオプションでコンパイルされたバイナリを実行できなくなる。

Windows APIのバージョン番号をBOOST_USE_WINAPI_VERSIONマクロを定義することによって、対象のWindowsバージョンを明示的に指定することもできる。たとえば、Windows XP向けにBoostをコンパイルするには、次のコマンドを使用する:

b2 release define=BOOST_USE_WINAPI_VERSION=0x0501

Windows APIのバージョン番号の一覧は、以下のページで確認できる:

この変更は、BoostのWindows APIに対する抽象レイヤーを使用しているライブラリだけに影響する。現在は、以下のライブラリが対象である: Boost.Chrono、Boost.Dll、Boost.Log、Boost.UUID。これらのライブラリに依存するライブラリも対象となる。

新ライブラリ

  • VMD
    • 可変引数マクロデータライブラリ(Variadic Macro Data Library)
    • 作者 : Edward Diener

更新ライブラリ

Atomic

  • atomic<>のストレージに、適切なアラインメントを設定した。これによって、ネイティブのワードサイズより大きいデータ単位に対するアトミック操作のサポートに関する問題が修正される。
  • IBM XL C++コンパイラでのPowerPC向けのコンパイルエラーを修正。PowerPCアセンブラのメモリバリアを正しいものにした。
  • MSVC-8でのARM向けのコンパイルエラーを修正。
  • #10994 128ビットアトミック操作を使用したときの、gcc 4.4でのx86-64向けのコンパイルエラーを修正。
  • x86/x86-64向けのgccアセンブラブロックを最適化し、使用するレジスタ数を減らした。これはbinutils 2.10以降を必要とする。

Chrono

バージョン2.0.5

バグ修正

  • #10778 VC14 CTP4において、boost::chronodurationTriviallyCopyableではないために、それを要素とするatomicのコンパイルが通らない問題を修正
  • #10840 test_7868.cppで、puts()関数の呼び出しがstd::修飾されていない問題を修正
  • #10851 time_point_output.cppで、puts()関数の呼び出しがstd::修飾されていない問題を修正
  • #10893 ドキュメントの誤字を修正
  • #10992 ChronoのIO State Saverが、Boost.IO State Saverと異なるインタフェースだったのを修正。コンストラクタの第1パラメータを、state_typeからstate_type&に変更した
  • #10995 duration_put::put_value()で、小数部が切り詰められる問題を修正
  • #11006 time_fmt_io_saverのコンパイルエラーを修正
  • #11012 chrono_io v2で、boost::chrono::duration < boost::rational <int>>のコンパイルに失敗する問題を修正

Container

  • 標準C++に提案されている、Polymorphic Memory Resourcesを実装した
  • BOOST_ASSERTでの事前条件のチェックを強化した(pop_back(), pop_front(), back(), front()、その他)
  • basic_stringに、C++11のback()front()を追加
  • バグ修正
    • Trac #11627 small_vector<T,n>::swap( )が壊れていたので修正
    • Trac #11628 要素のデストラクタを呼ぶ必要のないsmall_vector<int,n>で、要素のデストラクタが個別に呼び出されていたので修正
    • Trac #11697 可変引数テンプレートのツールとして作成したタプルの初期化が、tail -> headの順になっていたので、head -> tailの順になるよう修正
    • Trac #11698 static_storage_allocatorreturn文漏れを修正
    • GitHub #29 flat_mapのドキュメントで、計算量が間違っていたので修正
    • GitHub #31 dlmallocの実装で、アドレス取得がヌルチェックの中で行われていたために、アドレスを間接参照できない場合があったので修正

Context

  • #11603 PPC32/MACH-Oアセンブラの誤字を修正
  • Cygwinをサポート

Core

  • シンボルのデマングルツールに、Android NDKのgabi++ ABIのサポートを追加
  • 入れ子型の存在をSFINAEチェックするためのツールとして、enable_if_has_typeを追加

Filesystem

新機能

  • 以下の関数を追加した

    • path::lexically_normal() : パスの正規化を行う。正規化では、冗長なカレントディレクトリ(ドット)の指定や親ディレクトリ(ドット-ドット)の削除を行う。例:

      assert(path("foo/./bar/..").lexically_normal() == "foo");
      assert(path("foo/.///bar/../").lexically_normal() == "foo/.");
      

    • path::lexically_relative() : パラメータで指定されたパスから*thisのパスへの相対パスを求める。例:

      assert(path("/a/d").lexically_relative("/a/b/c") == "../../d");
      assert(path("/a/b/c").lexically_relative("/a/d") == "../b/c");
      assert(path("a/b/c").lexically_relative("a") == "b/c");
      assert(path("a/b/c").lexically_relative("a/b/c/x/y") == "../..");
      assert(path("a/b/c").lexically_relative("a/b/c") == ".");
      assert(path("a/b").lexically_relative("c/d") == "");
      

    • relative() : 第2パラメータのパスから第1パラメータのパスへの、相対パスを求める

    • weakly_canonical() : パラメータで指定されたパスのシンボリックリンクを解決し、正規化した結果のパスを返す
    • 上記4関数の追加で協力してくれたJamie Allsop氏に、多大な感謝をする
    • これによって解決したチケットは以下: #1976, #5897, #6249
  • pathクラスに、reverse_iteratorconst_reverse_iterator型を追加し、rbegin()rend()メンバ関数を追加した

  • Filesystem TSによって規定された、C++11のnoexceptを付加(コンパイラがnoexceptをサポートしていれば)
  • Filesystem TSによって規定された、C++11のムーブコンストラクタとムーブ代入演算子を追加(コンパイラがムーブをサポートしていれば)
  • Filesystem TSの規定に従って、関数の名前をいくつか変更した。現在は、古い名前と新しい名前、両方をサポートしている。
  • pathクラスにsize()メンバ関数を追加(#6874)

チケット

  • #11733 boost/libs/filesystem/src/unique_path.cppでのunistd.hのインクルード漏れを修正。Idar Tollefsen氏によるパッチを適用した
  • #5706 WindowsのTemporary User Profilesでunique_path()が失敗する問題を修正。Sebastian Redl氏によるpull requestを適用した(pull request #15)
  • #10591 このライブラリを、iOS 8でビルドできない問題を修正。Daniel Seither氏のパッチを適用した
  • #9454 BOOST_FILESYSTEM_NO_DEPRECATEDがdefineされていると、このライブラリをビルドできない問題を修正。Makesim氏のパッチを適用した
  • #11447 __OpenBSD__マクロ名が間違っていたのを修正。Jasper Lievisse Adriaanse氏のパッチを適用した
  • #11288 文字列の冗長なメモリ確保を回避した。Yevhen Ivannikov氏のパッチを適用した
  • #11175 古いドキュメントが原因で、このライブラリが例外を無効にして使用できるとユーザーに期待させてしまっていた
  • #11166 remove()関数の、競合の可能性を減らした
  • #7258 create_directories()関数に指定されたパスの最後がスラッシュの場合に、falseを返してしまっていたので修正。それにともなって、パスに「.」もしくは「..」が含まれていた場合のテストを追加
  • #10766 冗長な区切り文字が付いたパスに対してparent_path()を呼び出すと、間違った値が返されていたという問題が報告されたが、これは動作としては正しかったので、ドキュメントにその動作を記載した
  • #7607 スラッシュで終わるパスのファイル名が「.」であると推論される問題。この問題は、#7258#10766で解決した
  • #11061, #11062 パスを逆順に辿ることができないという問題だが、これはreverse iterator機能の追加によって解決した

その他修正

  • GCCのいくつかの警告を修正
  • file_statusrecursive_directory_iteratorのバグを修正 : 1引数以外のコンストラクタを非explicitにした
  • リファレンスドキュメントを整理した : 残りのドキュメントにも、同じスタイルシートを適用した。タブのフォントサイズを調整した。テーブル内の長すぎる行を修正した
  • Jonathan Wakely氏とMarcel Raad氏からのpull requestを含む、小さい修正を行った。

Flyweight

  • メンテナンス上の修正を行った

Fusion

  • 全てのFusionコンテナとジェネレータはC++11の可変長テンプレートをサポートした。(pull-request 89, pull-request 97, pull-request 100)
    • fusion::vectorに関する注意
      • 実装上の理由により、番号付きのvector(つまりfusion::vectorNの形)はC++11のエイリアステンプレートを使って提供され、C++11以降ではdeprecatedとなる。 この場合、いくつかの部分特殊化がコンパイルエラーとなる為、BOOST_FUSION_HAS_VARIADIC_VECTORマクロを使用して実装を切り替えなければならない(Spiritへのpull requestを参照されたい)。
  • fusion::nviewはC++11の可変長テンプレートをサポートした。(pull-request 90)
  • fusion::foldがSFINAE-friendlyとなった。(pull-request 102)
  • バグ修正
    • Fusionシーケンスをfusion::dequeへ変換できなかった。(#11572)
    • (ドキュメント) 関数の戻り値の型が正しくなかった。(#3358)

Geometry

解決したチケット

  • #10803 union_()アルゴリズムが、不正なジオメトリを返す問題を修正
  • #11522 traits::detail名前空間のbufferが名前衝突していたので修正
  • #11533 rtreeの最小要素数が1の場合にremove()関数を呼び出すと、アサートに失敗する問題を修正
  • #11607 geometry::exception::what()privateになっていたので、publicに修正
  • #11709 is_simple()でセグメンテーション違反が発生する問題を修正
  • #11710 is_simple()に空のジオメトリを与えるとセグメンテーション違反が発生していたので、trueを返すよう修正
  • #11711 is_simple()is_valid()に、NaNやInfinityを含むジオメトリを与えてもtrueが返ってきていたので、falseを返すよう修正

バグ修正

  • ほかのポリゴンにtouchする部分の、interior ringとexterior ringのコロケーション(colocations)を修正
  • 空のrtreeに対してremove()関数を呼び出した際に、アサート失敗するのではなく、何もせずに0を返すよう修正
  • 空のジオメトリをひとつだけ含むmulti geometriesに対するcentroid()の呼び出しによって、セグメンテーション違反が発生する問題を修正(Jiri Drbalek氏に感謝)
  • 整数座標系のliang_barsky strategyを修正(Dane Springmeyer氏に感謝)

Interprocess

  • offset_ptrのパフォーマンスを改善し、あらゆる未定義動作を削除した。異なるコンパイラでの特殊ケースが必要なくなった。
  • バグ修正
    • Trac #11699 Visual Studio 2015のバグにより、標準クラステンプレートの先行宣言がコンパイルエラーになっていたので、ワークアラウンドを追加

Intrusive

  • 順序付き連想コンテナでの「高度な検索と挿入」に、比較関数のサポートを追加した。key_compareと同じ「狭義の弱順序(strict weak ordering)」を提供することなしに、比較関数オブジェクトでコンテナを分割できる。
  • バグ修正

Lexical Cast

  • ムーブのみできる型を使用することができなくなっていたのを修正 #11570
  • BOOST_LCAST_NO_COMPILE_TIME_PRECISIONが定義されていた際にクラッシュしていたのを修正 #11669
  • #11570#4946で指摘されていた幾つかの警告を修正

Locale

  • ジェネリックなcodecvtファセットと、汎用的な目的に使用できるutf8_codecvtファセットを実装した
  • FreeBSD 10.0と上記の機能向けに、POSIXのロケールをサポートした
  • バグ修正
    • #10017 sunをSunOSに向けて再定義した
    • #11163 set_default_messages_domain()の不正な振る舞いを修正
    • #11673 ビルドの問題を修正
  • いくつかの警告を修正
  • 最新のICUバージョンでのテストを修正
  • libc++の問題へのワークアラウンドを追加
  • 新たなマクロBOOST_LOCALE_ENABLE_CHAR16_TBOOST_LOCALE_ENABLE_CHAR32_Tを追加。これは、C++11が有効であればchar16_tchar32_tに置き換えられる。

Log

全体的な変更

  • Windows環境で、構成マクロBOOST_LOG_USE_WINNT6_APIは使われなくなる。ターゲット環境を設定するマクロBOOST_USE_WINAPI_VERSIONを定義することによって、Windowsのバージョンを設定する必要がある。

バグ修正

  • #11559 AndroidでのGoogle NDKのコンパイルエラーを修正
  • #11549 ロギング文のいくつかのコンパイルエラーを修正。ストリームに入れる最初のオブジェクトは、formatting_ostreamがサポートされていなかった
  • #11549 Solaris Studio 12.4向けのワークアラウンドを追加。formatting_ostreamのコンパイルエラーが修正される
  • #11541 ネイティブのwchar_tを無効にしたときのコンパイルエラーを修正
  • POSIXライクシステム上での、boost_log_setupライブラリからのエクスポートシンボルを修正
  • character decoratorsのコンパイルエラーを修正
  • #11691 ファイル名にdate/timeのプレースホルダが含まれている場合に、text file sink backendで不正なファイル名であると判定される問題に対するワークアラウンドを追加

さらなる詳細は、changelogを参照。

Move

  • バグ修正 #11615: type_traits.hppでstd::size_tを完全修飾せず使っている場所があったので修正
    • 訳者註: <cstddef> ヘッダをインクルードしてもグローバル名前空間にsize_tが存在するとは限らない為、一部の標準ライブラリ実装ではコンパイルできない問題があった

Multi-index

  • オプショナルな定義であるforeachマクロ名による、Qtフレームワークとの相互運用の問題を修正
  • メンテナンス上の修正を行った

Odeint

Optional

  • #11203 boost::noneの実装を再度変更した。内部リンケージのconstオブジェクトとした。

Predef

バージョン1.4

  • SIMDハードウェアの検出機能を追加。BOOST_HW_*マクロを使用する(Charly Chevalier氏に感謝)
  • クロスコンパイルのチェックを行うための、コンパイルのみ行うユーティリティを追加
  • テストの警告を修正
  • Windowsプラットフォームの、AVAILABLEマクロの誤字を修正(Vemund Handeland氏に感謝)

Test

バージョン3.1

新機能

  • コマンドラインのインタフェースを改善
  • データセットのAPIを改善 : データセットの生成に初期化子リストを使用できるようにし、データセットの構築をより容易にした

バグ修正とリクエスト

  • #3384, #6032, #10317 ダブルクォーテーションで囲まれた引数が、スペースで分割されてしまう問題を修正
  • #6859 コマンドラインの、最後の空パラメータが無視される問題を修正
  • #11279 不正なパラメータを渡した際に、それが報告されない問題を修正
  • #11478 アサーションの失敗で送出される例外のメッセージが固定文言のため、原因がわからなかったので修正
  • #11571, #11625 BOOST_TEST( ..., per_element() )で、コンテナの比較ができない問題を修正
  • #11623 ClangでBOOST_TEST()のコンパイルが通らない問題を修正
  • #11624 C++11モードのGCCとClangで、BOOST_TEST( 0.0 == 0.0 )というテストが失敗する問題を修正

Thread

バージョン4.6.0

実験的な新機能

  • #11231 futureのデストラクタをブロッキングしないよう設定する機能を追加。BOOST_THREAD_FUTURE_BLOCKINGをdefineする
  • #11424 shared_mutexの名前変更としてshared_timed_mutexを提供し、元のtimed mutex機能付きのshared_mutexを非推奨とした
  • #11734 future::then(Cont)を、可能であればスレッドを引き継いで実行するようにした
  • #11736 launch::executorfuture::then(launch::executor, cont)のように使用できるようにした
  • #11737 launch::inheritポリシーを追加した。これを使用することにより、親のthen()で指定されたポリシーを引き継げるようにした

バグ修正

  • #3926 thread_specific_ptrとdlopenライブラリの組み合わせでセグメンテーションフォルトとなる問題を修正
  • #6377 時間が変更されると条件変数がブロックする問題を修正
  • #6787 システム時間が逆行すると、boost::thread::sleep()がハングする問題を修正
  • #7665 this_thread::sleep_for()steady_clockを使用していなかったので修正
  • #7720 mutexの集中的なロック取得/解除でlock_error例外が送出される問題を修正
  • #9309 clang-darwin-tot11環境で、test_latchがたまに失敗する問題を修正
  • #10788 GetLogicalProcessorが、Windowsプラットフォームの0x0502以下では使用できなかったので修正
  • #11090 ex_future_unwrapが、ThreadSanitizerによると、ロック取得の順番によってデッドロックする可能性があったので修正
  • #11158 pthreadのスレッドが、faketimeを使用するとデッドロックする問題を修正
  • #11174 boost::condition_variable::timed_wait()で無限に待つと、述語が突然起床することがある問題を修正
  • #11185 ドキュメントのURLリダイレクトが間違っていたので修正
  • #11192 boost::future::then()executorを組み合わせると、コンパイルが通らない問題を修正
  • #11250 make_exceptional()で作ったfutureオブジェクトが、そのデストラクタでアサーション失敗していたので修正
  • #11256 継続関数内でfuture<>::is_ready() == falseとなる問題を修正
  • #11261 basic_thread_pool内でスコープ付きスレッドの使い方が間違っていたので修正
  • #11262 shared_state_nullary_task内で直接的なポインタの使い方が間違っていたので修正
  • #11263 いくつかのアンロック操作が不足していたために、lock()関数で「すれにロックされている」という例外が発生する問題を修正
  • #11266 boost::packaged_taskクラスの可変引数シグニチャが間違っていたので修正
  • #11302 BOOST_THREAD_PATCHをdefineするとビルドが通らなかったので修正
  • #11322 sleep_for()のナノ秒オーバーロードを使用すると、Windows上で返ってくるのが早すぎる問題を修正
  • #11329 GetProcessHeap()のusingディレクティブが失敗する問題を修正
  • #11368 sleep操作で起床しない問題を修正
  • #11377 pthread環境上でシステム時間を変更すると、条件変数が永遠に待ってしまう問題を修正
  • #11435 future.hppの、GCCでの警告を修正
  • #11555 devector.hppが、allocator_traits_typeの存在を前提としていたので修正
  • #11562 タイマー起動後にシステム時間を設定すると、タイマーがすぐに切れる問題を修正
  • #11672 内部実装で、auto_ptrの代わりにunique_ptrを使用するようにした
  • #11688 thread::try_join_until()で、システム時間が変更された場合のbusy waitを待機
  • #11716 then()が、親のexecutorを引き継ぐようにした

UUID

  • UUIDを比較する際にクラッシュを引き起こす可能性のあるMSVC codegenのバグに対する、ワークアラウンドを追加
  • MSVCのコンパイラスイッチを使って、AVXが有効かどうかを検出できるようにした

テスト済みコンパイラ

主要なテストコンパイラ:

  • Linux:
    • Clang: 3.4, 3.6
    • Clang, C++14: 3.7
    • GCC: 4.4.7, 4.8.4, 4.9.3, 5.1.0, 5.2.1
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3
  • Windows:
    • GCC, C++03, mingw: 3.4.5
    • GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android:
    • Clang: 3.6, 3.7
    • GCC: 4.9.0, 5.2.0
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.4, 12.5

追加して含まれるテストコンパイラ:

  • Linux:
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2, 3.6.0, 3.8.0
    • Clang, C++14: 3.7.0
    • GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.9.3, 5.1.0, 6.0.0
    • GCC, C++11: 4.4.7
    • GCC, C++14: 4.9.3, 5.2.1
    • IBM XL C++: 13.1.2.0
    • Intel: 16.0
  • OS X:
    • Clang: 7.0.0
    • GCC: 5.2.0
  • Windows:
    • GCC, C++03, mingw: 3.4.5
    • GCC, C++11, mingw: 4.7.3, 4.8.1
    • GCC, C++14, mingw: 4.9.3, 5.1.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android:
    • Clang: 3.6, 3.7
    • GCC: 4.9.0, 5.2.0
  • FreeBSD:
    • Clang, C++11: 3.4.1, 3.7
    • GCC, C++11: 4.8.5, 5.2.0, 6.0.0
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.4, 12.5

翻訳

Akira Takahashi, Kohei Takahashi