本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_76_0.qbk
- http://www.boost.org/users/history/version_1_76_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
更新ライブラリ
- Asio
- Atomic
- Beast
- Bind
- Container
- Core
- DLL
- Filesystem
- GIL
- Histogram
- Interprocess
- Intrusive
- Json
- LexicalCast
- Log
- Math
- Move
- Multiprecision
- Nowide
- Optional
- Outcome
- Parameter
- PFR
- PolyCollection
- Predef
- PropertyTree
- Regex
- Stacktrace
- Type Traits
- Variant2
更新ツール
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_context
とthread_pool
の追跡を修正 - 内部の
call_stack
オブジェクトが実装ファイルからのみアクセスされるようにした - I/Oオブジェクトのムーブ代入でexecutorの有効状態を保つよう修正
- MSVCで関数のデフォルトテンプレート引数のコンパイラサポートの検出を修正
- 正しいセマンティクスが生成されなかったため、
blocking.always
がstrand<>
で使用されないよう修正 - 非推奨になっていた
asio/impl/src.cpp
ファイルを削除
Atomic
- GitHub #49 MSVCのARMターゲット向けコンパイルを修正
Beast
- 修正
- GitHub #2139
test::stream
にexecutorのrebindを追加 - WebSocket async shutdown内での未使用変数の警告を修正
- GitHub #2139
- 改善
- 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::map
とstd::pair
を組み合わせて使用した場合のコンパイルエラーを修正。std::tuple
では正しく動作していた - GitHub #171
deque::clear()
が未定義動作を引き起こしていた問題を修正 (UBSanで検出された)
- GitHub #102
Core
- 変換可能なreference wrapper間の暗黙変換を追加
boost/core/cmath.hpp
を追加。<cmath>
からの移植可能な浮動小数点数の分類関数の実装boost/core/bit.hpp
を追加。C++20標準ヘッダ<bit>
の移植可能な実装BOOST_TEST_EQ
とBOOST_TEST_NE
でのC++20の文字型を修正- アロケータアクセスのユーティリティを見直した (VS2013をサポートし、
allocator_traits
を使用したワークアラウンドがない)
DLL
- 破壊的変更 C++20の
import
キーワードとの衝突を避けるために、boost::dll::import
をboost::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::mean
とaccumulators::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_file
でfallocate
を使用するよう修正 - 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
/slist
がstd::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
- GitHub #37, GitHub #39 Boost.Mathへの依存をなくした (Peter Dimov氏に感謝)
- GitHub #38, GitHub #42 CIとカバレッジと修正 ("The C++ Alliance"のSam Darwin氏に感謝)
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との非互換性が発生した
- GitHub #139
- 詳細は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を参照
- Boost.Outcomeが、
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に修正
- macOSのデフォルトエンジンコンパイラ向けに、小さな間違いを修正するパッチを適用
テスト済みコンパイラ
主要なテストコンパイラ:
- 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