最終更新日時:
が更新

履歴 編集

Boost 1.64.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

  • Process
    • Klemens D. MorgensternによるProcessライブラリは、以下のようなことをクロスプラットフォームに提供する
      • 子プロセスの生成
      • 子プロセスのためのストリーム生成
      • ストリームを通じての子プロセスとの通信(同期、もしくは非同期に)
      • 子プロセスの終了を待機(同期、もしくは非同期に)
      • 子プロセスの終了
    • 既知の問題
      • GitHub #67 group.wait()が処理を返さない
        • 訳者註: 実際に問題が発生しているのはWindows環境でのみとされている

更新ライブラリ

Any

  • 一時オブジェクトへの参照をreturnで返す際の、誤った警告を抑制した
  • #12615 オブジェクトのアドレスを直接取得する代わりに、boost::addressofを使用するようにした
  • #12053 インクルードするBoostのヘッダファイルは、ダブルクォートで囲むのをやめて山カッコで囲むようにした
  • CIのテストで、addressleakundefinedのサニタイザーを走らせるようにした
  • テストを追加

Atomic

  • GCC 4.7以前の32bit x86コンパイラで正しくない64bitアトミック命令が出力されてしまう問題を修正

Config

  • 欠陥検出マクロBOOST_NO_CXX11_SFINAE_EXPRを追加。
    • BOOST_NO_SFINAE_EXPRは以前からあったが、CXX11が名前に含まれたマクロがなかった

Container

  • バグ修正
    • Trac #12749 container::pmr::polymorphic_allocatorのコンパイルエラーを修正
    • Trac #11333 boost::container::basic_stringboost::basic_string_viewを相互運用できるようにした
    • GitHub #45 emplace_back*end()ではなくback()を返すべき

Context

  • 新しいAPIとしてcall/ccを実装した
    • 訳者註: いわゆるSchemeなどに代表されるCall with Current Continuationのことである
  • execution-contextが(v1,v2ともに)廃止予定となった
  • MIPSにおけるスタックポインタの進め幅を修正
  • #12719 mingw-w64でセグメンテーションフォルトする問題を修正
  • #12948 Android ARMにおいてsnprintfが意図しない結果を出していたのを修正
    • 訳者註: snprintfに限らずスタックの開始アドレスが間違っていた
  • #38 macOSでcontext_entry()がクラッシュする問題を修正
  • #39 Clang 3.8でサポートされない.cpuディレクティブがAArch64で使われていたことによってビルド出来なかった問題を修正
  • #41 std::invokeによってstd::bindが出来なかった
    • 訳者註: ContextではなくCoroutine2の問題でありCoroutine2を参照されたい
  • #46 テストがメンバ名の変更に対応できていなかったのを修正
  • #50 ppc64/sysv/elfの組み合わせで出力されるアセンブリが正しくなかったのを修正

Conversion

  • ドキュメントをQuickbookに移行した (Mikhail Maksimov氏に感謝)
  • テストでのメモリリークを修正 (Mikhail Maksimov氏に感謝)
  • CIのテストで、addressleakundefinedのサニタイザーを走らせるようにした

Core

  • C++11のconstexprとC++11のSFINAE式を実装したコンパイラにおいて、constexpr修飾されたaddressofを実装した (Glen Fernandes氏に感謝) サポートされない場合にはBOOST_CORE_NO_CONSTEXPR_ADDRESSOFマクロが定義される
  • コンテナ要素をテストするためのBOOST_TEST_ALL_EQマクロとBOOST_TEST_ALL_WITHマクロをlightweight_test.hppに追加した (Bjorn Reese氏に感謝)

Coroutine2

  • #4 coroutine2<>std::bindを受け取れなかった問題を修正

DLL

  • Windows CEでのコンパイルエラーを修正
  • ポインタからシンボルの位置を取得するboost:dll::symbol_location_ptr関数を追加。(たとえばvoid*からの)間接参照ではシンボル位置を取得できなかった
  • メンバポインタに対するdetail::aggressive_ptr_castの未定義動作を修正
  • 実験的なスマートインポートでのリークを修正
  • 警告を修正
  • CIのテストで、addressleakundefinedのサニタイザーを走らせるようにした

Geometry

  • 改善
    • 行列変換のベースを、Boost.uBLASの代わりにBoost.QVMを使用するようにした
  • 破壊的変更
    • ublas_transformermatrix_transformerに名称変更
    • rtreeのコンストラクタに、明示的な変更器(modifier)としてindex::dynamic_*パラメータを追加
    • strategy::area::huillerstrategy::area::sphericalで置き換えた
  • 解決した問題
    • GitHub #363 geometry/index/parameters.hppでのインクルード漏れを修正
    • GitHub #364 異なるpoint型を使用したときにwithin(Linear, Areal)がコンパイルエラーになる問題を修正
    • GitHub #370 Bufferに入力としてRingを与えたときのセグメンテーションフォルトを修正
  • 解決したチケット
    • Trac #11899 boost::geometry::equals()が開いたポリゴンを扱えない
    • Trac #11930 area::huiller戦略が不正確
    • Trac #11931 pole encirclingなポリゴンの球面積が間違っている
    • Trac #12410 correct()に塵座標系のサポートが欠如していた
    • Trac #12566 pairの値に生ポインタが含まれている場合にequal_to<>内でテンプレートのインスタンス化が曖昧になる
    • Trac #12861 stdlibc++ (gcc 4.8.2)でrtreeがセグメンテーションフォルトになる
    • Trac #12885 throwの代わりにBOOST_THROW_EXCEPTIONを使用する
  • バグ修正
    • get_turn_info内のdistance_measureを修正

Fiber

  • (un)bounded_channel<>を削除
  • #100 ASIO: notifyでの処理が足りないことで他のファイバーが実行されなくなる問題を修正
  • #105 Windows環境下でskynetのパフォーマンステストがクラッシュしていたのを修正
  • #106 fixed_stackアロケータをasyncpackaged_taskに渡すことが出来なかった問題を修正
  • #110 ARMv6でのコンパイルエラーを修正
  • #111 buffered_channel::try_value_pop()の内部で無限ループする問題を修正
  • #114 buffered_channel::try_push()popで待っているファイバーを再開しない問題を修正

Hash

  • Visual C++の新しいバージョンで削除された関数オブジェクトを使用するのをやめた。(C++11で非推奨化され、C++17で削除されることになったstd::unary_functionstd::binary_function)

Interprocess

  • バグ修正
    • Trac #12617 OS X 10.11でのclock_gettimeがないというコンパイルエラーを修正
    • Trac #12744 Windowsにおいて、boost::interprocess::ipcdetail::spin_wait内でwinapi::set_timer_resolutionが使われていたために、おかしな分解能の変換が行われていた。winapi::query_timer_resolutionを使用するよう修正
    • GitHub Pull #32 std::pointer_traitsの要件に準拠するよう修正。C++11以降の環境では、offset_ptr<T>::rebind<U>::otherではなくoffset_ptr<T>::rebind<U>で型をとれるようにした
    • GitHub Pull #33 64/32ビットプロセス間の共有において、基本クラスのoffset_ptrから派生クラスのoffset_ptrに正しく変換できるようにした
    • GitHub Pull #34 サンプルコードでBOOST_MULTI_INDEX_MEMBERの代わりにmulti_index::memberを使用するようにした
    • GitHub Pull #35 クロスコンパイルのオプションを修正
  • Windowsシステムからの新たな実験的オプションBOOST_INTERPROCESS_BOOTSTAMP_IS_SESSION_MANAGER_BASEDを追加。このオプションは、セッションマネージャに関連付けられたレジストリの値から、共有メモリが置かれるフォルダ名として使用される一意なブートスタンプに由来する。このオプションはVista以降で動作し、デフォルトバージョンはこれ以降の安定バージョンとなるだろう

Intrusive

  • バグ修正
    • Trac #12745 key_nodeptr_compのキー型がvoid*のときコンパイルエラーになる問題を修正
    • Trac #12761 intrusive::set::swapで(状態を持つ)比較関数が入れ替わらない問題を修正

LexicalCast

  • #11842 いくつかの警告を修正
  • CIのテストで、addressleakundefinedのサニタイザーを走らせるようにした

Math

  • C99にあるすべての関数がAnnex F (IEC 60559) と互換があることを確実にした
  • #12066 ベッセル関数I0、I1、K0、K1の精度を改善した

Multi-index

  • Trac ##12955 ひとつ以上のranked indexが指定された場合に、あいまいな参照になる関連バグを修正
  • メンテナンス上の修正

Multiprecision

  • #12527 非正規化数のcpp_bin_floatdoublefloatに変換する際に、丸めが二重に行われる問題を修正
  • #12559 小さい整数に対する整数平方根のバグを修正
  • cpp_bin_floatの符号付きゼロの変換を修正
  • #12527 cpp_bin_floatの丸めコードを修正し、任意の場所で丸められるようにした。それを変換で使用できる
  • 128ビットのビットスキャン操作のパフォーマンスを改善
  • #12580 非常に小さなcpp_bin_floatの減算を修正
  • #12581 C99 Annex F (IEC 60559)互換となるようエラーハンドリングを追加
  • #12627 cpp_intの自明なビット取り出しを修正
  • #12625 一貫性のために、ilogb (とそれを使用するコード) の引数がゼロのときに指数型の最小値を返すよう修正
  • __float128からcpp_bin_floatへの変換を許可
  • #12790 ビットが失われる問題の原因となっていたcpp_intの左シフトバグを修正
  • #12798 境界はあるが可変精度なcpp_intにおいて、過度に積極的なconstexpr最適化によって起こっていたバグを修正

Predef

  • Intel C/C++コンパイラのバージョン仕様を修正
  • Boostの有効なバージョン番号から各要素を取り出すためのマクロBOOST_VERSION_NUMBER_MAJORBOOST_VERSION_NUMBER_MINORBOOST_VERSION_NUMBER_PATCHを追加。それぞれ、Boostのメジャーバージョン、マイナーバージョン、パッチバージョンを取得できる
  • Visual Studioバージョンの番号付けを変更。VS2015以降は、多様なプロダクトバージョンの代わりに、コンパイラバージョンを使用するようにした commit 0d56819

Program Options

  • Trac #7495, GitHub #18 値のboost::optionalへの書き込みをサポートした (Ed Catmur氏に感謝)

Regex

  • Oracle C++ toolsetでのコンパイルで、静的リンクすべしという制限をなくした
  • #12818 大きな成果として、libFuzzerを使用してライブラリの脆弱性と認定問題(identified issue)を修正した

Smart Pointers

Test

  • Boost Test v3.5
  • 新機能

    • ユーザー定義型をロギングするカスタマイゼーションポイントを提供するようにした。そのためには、型と同じ名前空間で、以下の関数を定義する:

      std::ostream& boost_test_print_type(std::ostream& ostr, ArgumentType const& right);
      

    • JUnitの出力フォーマットが/log-level/を持つようにした

    • JUnitの出力フォーマットは、テストモジュールが多くのチェックを持つ場合、良いパフォーマンスはでません
  • バグ修正

    • GitHub #107 throw_exception関数内で使用する例外無効指定の検出をするマクロのtypoを修正
    • GitHub #108 runtime_configの文字列定数の命名規則を、大文字アンダースコア区切りから、小文字アンダースコア区切りに修正
    • Trac #11756 <cfenv>標準ヘッダがない環境で、FE_*系マクロを使用したコードのコンパイルが通らない問題を修正
    • Trac #12540 ユーザー定義型をロギングするカスタマイゼーションポイントを追加
    • Trac #12712 同じ名前を持つテストケースで競合が発生していたため、BOOST_AUTO_TEST_SUITEでのユニークな名前の生成に、__COUNTER__を使用するようにした
    • Trac #12748 VERSIONという名前の変数を定義していたことにより発生していたコンパイルエラーを修正。小文字の変数にした
    • Trac #12778 nullptrをサポートした

TypeIndex

  • GitHub #13 BOOST_TYPE_INDEX_IMPLEMENT_RUNTIME_CASTマクロを追加。これはruntime_castの実装のための機能だが、その目的のために使用していたBOOST_TYPE_INDEX_REGISTER_CLASSマクロにその機能は含まれていなかった (実装者のChris Glover氏に感謝)
  • #12739 stl_type_index.hppでの未定義マクロによる警告を修正
  • CIのテストで、addressleakundefinedのサニタイザーを走らせるようにした

TypeTraits

  • 新しい型特性、make_voidを追加
    • 訳者註: これはC++17で実装されるstd::void_tに相当し、テンプレートエイリアスが実装されたコンパイラではboost::void_tも提供される。 boost::make_voidは可変長テンプレートをサポートしないコンパイラでも提供されるが、その場合は5要素を上限とする

Unordered

  • C++17のメンバ関数サポートを開始した:
    • unordered_mapinsert_or_assigntry_emplaceを追加
    • 全てのコンテナにmergeextractを追加

Variant

  • #12508, #12645 recursive_variant_からvariantの構築でコンパイルエラーになる問題を修正 (Mikhail Maksimov氏に感謝)
  • #12236 MSVC 2015 Update 1で可変引数テンプレートを有効にしていない場合にまだ問題があったので修正
  • #12680 #7120 GCC6でクラッシュする問題に対してワークアラウンドを入れた (Mikhail Maksimov氏に感謝)
  • boost::polymorphic_*getboost::*getとして動作するよう、ドキュメント化していない境界値テスト(border tests)と固定値テスト(fixed tests)を作った
  • CIのテストで、addressleakundefinedのサニタイザーを走らせるようにした

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1, 3.9.1
    • Clang, C++14: 3.5, 3.6, 3.7.1, 3.8.1, 3.9.1
    • Clang, C++1z: 3.9.1
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0
    • GCC, C++14: 5.4.1, 6.2.0, 6.3.0
    • GCC, C++1z: 6.2.0
    • Intel: 16.0, 17.0
    • Intel, C++11: 16.0, 17.0
    • Intel, C++14: 16.0, 17.0
  • OS X:
    • Apple Clang: 7.0.2
    • Apple Clang, C++11: 7.0.2
  • 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: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 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.2
  • FreeBSD:
    • Clang: 3.8
    • Clang, C++11: 3.8
    • Clang, C++14: 3.8
    • Clang, C++1z: 3.8
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.5
    • Oracle Solaris Studio, C++11: 12.5

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

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.8.1, 3.9.1
    • Clang, C++14: 3.4, 3.5, 3.6, 3.7. 3.8, 3.8.1, 3.9.1
    • Clang, C++1z: 3.9.1, 4.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0
    • GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0
    • GCC, C++14: 5.4.1, 6.2.0, 6.3.0, 7.0.1
    • GCC, C++1z: 6.2.0
    • Intel: 16.0, 17.0
    • Intel, C++11: 16.0, 17.0
    • Intel, C++14: 16.0, 17.0
  • OS X:
    • Apple Clang: 7.0.2
  • Windows:
    • GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • Android:
    • Clang: 3.6, 3.7, 3.8
    • GCC: 4.9, 5.4, 6.2
  • FreeBSD:
    • Clang, C++98: 3.8
    • Clang, C++11: 3.8
    • Clang, C++14: 3.8
    • Clang, C++1z: 3.8
  • QNX:
    • QCC: 4.4.2
  • SunOS:
    • Oracle Solaris Studio: 12.5
    • Oracle Solaris Studio, C++11: 12.5

翻訳

Kohei Takahashi, Akira Takahashi