最終更新日時:
が更新

履歴 編集

Boost 1.76.0リリースノート

本家リリースノート:

リポジトリは以下:

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

更新ライブラリ

更新ツール

Asio

  • 型の別名ip::scope_id_typeを追加
  • 型の別名ip::port_typeを追加
  • IPアドレスのstd::hash特殊化を追加
  • ip::basic_endpoint<>std::hash特殊化を追加
  • SFINAEの使用をリファクタし、コンパイル時間を改善
  • カスタマイゼーションポイントのfriendサポートを追加し、多くのカスタマイズをprivateにした
  • any_io_executorをstrong typedefスタイルのクラスに変更
  • experimental::as_singleを非推奨のハンドラーフックで動作するよう修正
  • すべてのプラットフォーム向けにpthreadの条件変数の属性を整理
  • socketとdescriptorのスレッド安全性を明確にした
  • macOS/FreeBSDで、socket()が失敗した場合にerrnoが上書きされないようにした
  • ムーブ代入時のio_contextthread_poolの追跡を修正
  • 内部のcall_stackオブジェクトが実装ファイルからのみアクセスされるようにした
  • I/Oオブジェクトのムーブ代入でexecutorの有効状態を保つよう修正
  • MSVCで関数のデフォルトテンプレート引数のコンパイラサポートの検出を修正
  • 正しいセマンティクスが生成されなかったため、blocking.alwaysstrand<>で使用されないよう修正
  • 非推奨になっていたasio/impl/src.cppファイルを削除

Atomic

  • GitHub #49 MSVCのARMターゲット向けコンパイルを修正

Beast

  • 修正
    • GitHub #2139 test::streamにexecutorのrebindを追加
    • WebSocket async shutdown内での未使用変数の警告を修正
  • 改善
    • GitHub #2124 Beastを使用するために浮動小数点サポートを要求しないようにした
    • すべての操作にcommon buffers typeを使用するようにしたことにより、websocketyのコンパイルされたコードのサイズを削減した
    • HTTPパーサーの誤った使い方の検出を改善
  • その他修正
    • GitHub #2140 ライブラリのメタデータにcxxstdタグを追加
    • Drone CIに移行
    • 小さなドキュメントフォーマットの改善
    • in-treeビルドでの要求されるBoost.ThreadライブラリをCMLが見つけられるようにした

Bind

  • boost::bindでC++11標準のプレースホルダーを使用できるようサポートを追加
  • boost::applyで可変引数テンプレートと完全転送を使用できるよう更新

Container

  • 未使用の戻り値に関連するバグを捕捉するために、すべてのコンテナに[[nodiscard]]属性を追加
  • デフォルトの標準例外クラスをBoost.Container独自のクラスに置き換え、インクルードファイルのオーバーヘッドを大幅に減らした。例として、Visual Studio 2019ではboost/container/vector.hppをプリプロセスした際のサイズが1.5MBから930KBに減少する。標準例外クラスを使用したい場合は、Boost.Containerのクラスを使用するまえにBOOST_CONTAINER_USE_STD_EXCEPTIONSを定義すること
  • バグと問題の修正:
    • GitHub #102 flat_map::insertがinitializer listとpairであいまいになってしまう問題を修正
    • GitHub #139 flat_map::mergeのドキュメントが間違っていた問題を修正
    • GitHub #141 small_vectorが要素型のnoexcept状態を伝播しない問題を修正
    • GitHub #164 pmr::mapstd::pairを組み合わせて使用した場合のコンパイルエラーを修正。std::tupleでは正しく動作していた
    • GitHub #171 deque::clear()が未定義動作を引き起こしていた問題を修正 (UBSanで検出された)

Core

  • 変換可能なreference wrapper間の暗黙変換を追加
  • boost/core/cmath.hppを追加。<cmath>からの移植可能な浮動小数点数の分類関数の実装
  • boost/core/bit.hppを追加。C++20標準ヘッダ<bit>の移植可能な実装
  • BOOST_TEST_EQBOOST_TEST_NEでのC++20の文字型を修正
  • アロケータアクセスのユーティリティを見直した (VS2013をサポートし、allocator_traitsを使用したワークアラウンドがない)

DLL

  • 破壊的変更 C++20のimportキーワードとの衝突を避けるために、boost::dll::importboost::dll::import_symbolに名称変更
  • FAQを含むドキュメントを更新

Filesystem

  • GitHub #169 WASIプラットフォームとの互換を更新
  • GitHub #176 パスが////である場合の、path::remove_filenameによって送出される例外を修正
  • GitHub #182 create_directoriesが内部で発行されたファイル状態の問い合わせで起きたエラーを無視する問題を修正。修正前は、create_directoriesが誤ったエラーコードが返される可能性があった

GIL

  • 破壊的変更 次のリリースでGCC 5のサポートを落とす。また、要求するC++の最低バージョンをC++11からC++14に変更する予定

Histogram

  • このリリースには、クリティカルな修正が含まれている。あなたの使用に影響がないことを確認してほしい
  • cropをともなうalgorithm::reduceは、選択した範囲が実際にflow binと重なっている (overlap) 場合に、flow binのカウントを削除しないようになり、flow binの処理 (treatment) がinner binと一致するようになった
  • accumulators::meanaccumulators::weighted_meanは、operator+=が呼び出された際に、例としてアキュムレータがヒストグラムを追加した際に、分散 (variance) を正しく計算するようになった。分散が小さすぎる以前の問題として値が間違っていた
  • アキュムレータがoperator()の代わりにoperator+=を使用した場合に、ユーザー定義アキュムレータでの重み (weight) サポートの検出がコンパイル時に壊れていた。テストは組み込みweighted_sumの誤ったケースのみパスしていた

Interprocess

  • ネイティブのワイド文字APIを提供するOS (例としてWindows) での名前付きリソースのwchar_t APIのサポートを追加。以下のAPIは、wchar_tの名前をサポートするよう更新した:
    • file_mapping
    • managed_mapped_file
    • managed_shared_memory
    • managed_windows_shared_memory
    • shared_memory_object
    • windows_shared_memory_object
    • file_lock
    • named_condition
    • named_condition_any
    • named_mutex
    • named_recursive_mutex
    • named_semaphore
    • named_sharable_mutex
    • named_upgradable_mutex
    • message_queue
  • ネイティブのPOSIXもしくはWinapiの関数の代わりにプロセス共有同期プリミティブの汎用エミュレーションコードを使用することを無効にするBOOST_INTERPROCESS_FORCE_NATIVE_EMULATIONマクロを追加
  • バグ修正
    • GitHub #76 Cygwinでのコンパイルエラーを修正
    • GitHub #83 BOOST_INTERPROCESS_FORCE_NATIVE_EMULATIONオプションを追加
    • GitHub #92 bufferstreamのMSVCでの警告を修正
    • GitHub #106 truncate_filefallocateを使用するよう修正
    • GitHub #120 segment_managerのカスタマイゼーションポイントとしてget_memory_algorithm()を追加
    • GitHub #122 コンストラクタ/代入/swapの可能なところにnoexceptをつけた
    • GitHub #126 clang-cl.exeでの_ReadWriteBarrierの非推奨警告を修正

Intrusive

  • コンパイル時の依存性を削減:
    • linear_slist_algorithmsが返す型としてstd::pairの代わりにシンプルなnode_ptrを使用するよう修正
    • list/sliststd::equal_to/std::lessの代わりにoperator==/operator <を使用するよう修正
  • GitHub #54 set.rbegin()の計算量がO(log(N))になっていた問題を修正

Json

  • GitHub #481 value_fromの実装をリファクタ。現在は、ユーザーカスタマイゼーションは、ライブラリが提供するオーバーロードよりも優先される
  • GitHub #484 いくつかの浮動小数点数の不正確なパースを修正
  • GitHub #485 Boostといっしょに使用した場合の、スタンドアロンモードでのリンクエラーを修正
  • GitHub #497 GCC 4.8向けのBoost.Buildビルドを修正

LexicalCast

Log

  • バグ修正
    • GitHub #139 asynchronous_sinkフロントエンドのunbounded_fifo_queueポリシーで使用されるスレッドセーフなlog record queueの実装にあった競合状態 (race condition) を正式に修正。競合はTSANによって検出されたが、現在のほとんどのCPUアーキテクチャとコンパイラでは、実際には問題にならない
    • channel属性をもつloggerをコピーした際に (たとえばchannel_logger)、元のloggerからchannel属性をディープコピーするようにした。これによって、新しいloggerでchannelを変更しても元のloggerに影響しなくなる
    • GitHub #141 テンプレートパラメータでのstd::allocator<void>の使用を新たなタグ型boost::log::use_std_allocatorに置き換えた。これはstd::allocator<void>がC++17以降で非推奨になりlibc++で警告が出力されるようになったため。このタグは、インスタンス化されたテンプレートが動的メモリを確保するために内部でstd::allocatorの特殊化を使用するため、この変更による機能的な影響はない
    • GitHub #149 Boost.LogはMinGWおよびMinGW-w64向けに__MSVCRT_VERSION__マクロを定義しないようにした。このマクロを定義すると、最近のMinGW-w64でオプションとして仕様できるUCRTとの非互換性が発生した
  • 詳細はChangelogを参照

Math

  • 破壊的変更 C++03のサポートを削除した。このライブラリを使用するにはC++11以降が必要となる
  • Z-testを追加
  • 統計関数であるunivariate (単変量) とbivariate (二変量) に実行ポリシーのサポートを追加 (C++17と<execution>が必要となる)
  • CIテストに対する大きな更新・改善
  • bivariate (二変量) 統計に整数サポートを追加
  • T-Testに整数サポートを追加
  • Linear regression (線形回帰) に整数サポートを追加
  • 終了点 (endpoints) でのbeta distribution (ベータ分布) のPDFを正しくした
  • GitHub #396 特定の多倍長ケースでStirling's approximation (スターリング近似) の使用を正しくした
  • Clangで-Wimplicit-int-float-conversionオプションを除外
  • quaternion/octonionでのいくつかのconstexpr問題を修正
  • tanh_sinh微分での小さなパフォーマンス問題を修正
  • hypergeometric functions (超幾何関数) 内部のスケーリングを更新し、多倍長型の64ビット (long long) 指数部の使用を許可

Move

  • GitHub #35 新たな例外送出しないムーブのトレイトが不完全だった問題を修正

Multiprecision

  • 破壊的変更 大規模なリファクタリングとコードのシンプル化により、C++11が絶対の要件となった
  • 例外フリーな環境で使用できるようにするために、BOOST_TRY/CATCHを使用するようにした
  • GitHub #277 powのコーナーケースを正しくした
  • GitHub #257 lsbとmsbのドキュメントと一致するよう、送出される例外の型を正しくした
  • GitHub #278 関係しているが異なる型 (例としてアロケータ型) の間で、ムーブと演算を許可

Nowide

  • seek関数もしくはsync関数が使用され (Windowsなどで) 改行が変換された場合に、text file streamの文字が無視される問題を修正
  • 閉じられたfile streamを (openによって) 再利用する際の、潜在的な「解放後の使用 (use-after-free)」バグを修正
  • sourceがput-back character (istream::unget()でストリームに戻す文字) をもっている、もしくはunbuffered modeが設定されているオブジェクトへムーブもしくはswapされたfile streamオブジェクトを使用した場合に、不正メモリアクセスが起きる可能性があった問題を修正
  • UCRTランタイムとの互換性のため、__MSVCRT_VERSION__マクロを定義しないようにした
  • 既知の問題 : テキストファイルの読み取り速度が低下する。バイナリファイルと書き込みには影響しない

Optional

  • MSVCでのC4702 (到達できないコード) 警告を修正

Outcome

  • アナウンス
    • 破壊的変更 繰り返してきたこのアナウンスをはじめてから1年 (3回のBoostメジャーリリース) が経ち、今回がv2.2ブランチの最初のリリースとなる。このブランチには、Boost 1.75以前に含まれたOutcome v2.1に対する
  • 強化
    • VS2019.8でOucomeがコンパイルできなかったため、コルーチンを有効にする方法を変更した
    • C++20の場合、コンパイラ固有のマークアップの代わりに[[likely]]属性を使用するようにして、TRYが成功・失敗する可能性が高いことを示すようにした
    • 破壊的変更 以前までspare_storage(const basic_result|basic_outcome *) noexcepの値はBOOST_OUTCOME_TRYに伝播されなかった。これによって、エラー結果を構築するためにキャプチャされたスタックバックトレースがすべてTRYごとに落とされていた。今回の修正では、success_type<T>failure_type<T>、およびauto success(T &&, ...)auto failure(T &&, ...)にオプションspare_storageを追加したことにより、この問題を修正する
  • バグ修正
    • Boost.Outcomeが、BOOST_NO_EXCEPTIONSが定義された状態でもコンパイルできるようになったはず。Boost.ExceptionのメンテなであるEmilの協力によって、Outcomeにこの修正が行われた。Boost.Outcomeは、C++例外がグローバルに無効にされた状態でもコンパイルできるべきである。ただし、その状態ではboost::exception_ptrは使用できない
    • 破壊的変更 GitHub #244 このライブラリの初期リリースから、特定のコーナーケースコードでBOOST_OUTCOME_TRYが壊れていたため、TRYの動作を大幅に変える必要があってショックを受けた。詳細はchangelogを参照

Parameter

  • GitHub #109, GitHub log #132 関数の名前付きパラメータのデフォルト値として右辺値が使用された場合にVS2015でコンパイルに失敗する問題に対するワークアラウンドを追加

PFR

  • テンプレートコンストラクタのSFINAE式で、型のリフレクションにconstが欠落している問題を修正。標準ライブラリの実装がLWG3050の修正に対応していない環境であっても、std::optional<std::chrono::duration<???>>フィールドをもつ集成体のリフレクションが正しく動作するようになった
  • GitHub #52 比較関数をconstexprにした
  • GitHub #63 ドキュメントの多くの誤字を修正 (Phil Miller氏に感謝)

PollyCollection

  • GitHub #20 GCCのバグに対するワークアラウンドを導入。GCCのバージョン9.3から10.2に影響する

Predef

  • バージョン1.13
  • 事前定義マクロARCH_PPC_64を追加
  • ARCH_WORD_BITS*の再定義による警告・エラーを修正
  • Elbrus 2000アーキテクチャを検出する事前定義マクロARCH_E2Kを追加 (Konstantin Ivlev氏に感謝)
  • 10.xを超える最近のC++バージョンを扱えない問題を修正

  • バージョン1.12

  • OpenBSD環境でendian.hヘッダを使用するよう変更 (Brad Smith氏に感謝)
  • 9を超える最近のstdcxxバージョンを扱えない問題を修正
  • sub-BSD OSのヘッダを直接インクルードすることによる再定義警告を修正
  • 全ヘッダをインクルードするCIテストを追加
  • FreeBSDでのClang or GCCのCIテストを追加
  • アーキテクチャのワードサイズを検出するためのWORD_BITS事前定義マクロ集合を追加。これはMikhail Komarov氏によって提出された初期実装に触発されたもの
  • Cygwin 32 or 64のCIテストを追加

PropertyTree

  • Property Treeは新たなメンテナを得た
  • 非推奨となっているBoost.Bind機能の使用を修正
  • Wikipediaへのリンクを修正
  • GCCの警告を修正するためにBOOST_OVERRIDEを使用
  • CIテストを拡張

Regex

  • Regexライブラリは、C++03モードを除いてヘッダオンリーとなった
  • C++03サポートを非推奨化
  • このライブラリは、Boostのほかのライブラリが存在しなくてもスタンドアロンで使用できるようになった

Stacktrace

  • GitHub #102 ClangでのC++11未満でのビルドサポートを改善
  • GitHub #71 「シグナルハンドラ内でstacktraceを使用してはならない」という警告をより大きくした

Type Traits

  • Visual Studioのマネージドプロジェクト向けの修正

Variant2

  • ダブルバッファを使用するケースの生成されるコードを改善

Build

  • B2バージョン4.4.1
    • macOSのデフォルトエンジンコンパイラ向けに、小さな間違いを修正するパッチを適用
      • macOS/XCode向けのエンジンビルドのデフォルトをClangからGCCに修正

テスト済みコンパイラ

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

  • Linux:
    • Clang: 3.0, 4.0.1, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0, 11.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0, 11.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

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

  • Linux:
    • Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
    • Clang, C++0x: 3.0
    • Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
    • GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
    • GCC, C++0x: 4.4.7
    • GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
    • GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
    • GCC, C++17: 7.3.0, 8.0.1
    • Intel, C++14: 18.0
  • OS X:
    • Apple Clang: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
    • Apple Clang, C++17: 9.1.0, 10.0.0
    • Apple Clang, C++1z: 9.0.0
    • Apple Clang, C++2a: 10.0.0
  • Windows:
    • GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
    • GCC, C++0x: 4.6.4
    • GCC, C++11: 4.7.3, 4.8.1, 4.9.3
    • GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
    • GCC, C++17: 7.1.0, 7.2.0, 7.3.0
    • Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
  • FreeBSD:
    • Clang: 4.0.0
    • Clang, C++11: 4.0.0
    • Clang, C++14: 4.0.0
    • Clang, C++1z: 4.0.0

翻訳

Akira Takahashi