本家リリースノート:
- https://github.com/boostorg/website-v2-docs/blob/develop/release-notes/boost_1_91_0.adoc
- https://www.boost.org/releases/1.91.0/
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
- Decimal
- IEEE754 10進浮動小数点数の実装。作者Matt Borland氏、Christopher Kormanyos氏
更新ライブラリ
- Any
- Core
- Describe
- DynamicBitset
- Exception
- JSON
- LEAF
- LexicalCast
- MultiIndex
- MSM
- Optional
- PFR
- Stacktrace
- System
- TypeIndex
- Unordered
- UUID
- Variant2
Any
- CMake における
import stdの検出を修正 boost::anys::basic_anyの実装を簡素化
Core
- GitHub #90 ヘッダ
boost/is_placeholder.hppを Bind から Core へ移動
Describe
- C++20 において、囲むクラスがまだ不完全な場合でも、記述されたネストされた列挙型が動作するようになった(Julien Blanc氏の貢献)
enum_to_stringをconstexpr化(Julien Blanc氏の貢献)
DynamicBitset
operator-( const bit_iterator_base< Iter > & lhs, const bit_iterator_base< Iter > & rhs )に対する不足していた friend 宣言を追加- 生ポインタをイテレータとして使用する標準ライブラリ実装でのコンパイルを修正
from_block_range()がビットセットの未使用部分にビットを設定しないよう修正
Exception
- カスタマイズ可能なシリアライゼーション API を追加。Boost.JSON および nlohmann/json の組み込みサポート付き
JSON
std::initializer_listからのvalueの構築をvalue_fromを使用するよう変更
LEAF
- カスタマイズ可能なシリアライゼーション API を追加。Boost.JSON および nlohmann/json の組み込みサポート付き
- Windows 上で DLL 境界を越えた LEAF エラーオブジェクトの使用をサポート(デフォルトでは無効)
- 内部 TLS API の改善(例: Win32、組み込み)
- 診断システムおよび
on_error実装の改善 - 実装品質の改善(例:
noexceptのより正確な使用) - 非推奨の
verbose_diagnostic_infoを削除(diagnostic_detailsに置換済み)
LexicalCast
- C++20 モジュール
boost.lexical_castの初期バージョンを実装
MultiIndex
- 破壊的変更: ライブラリが受け入れまたは提供するすべての型リスト(
indexed_by、tag、ネストされた typedefindex_specifier_type_list、index_type_list、iterator_type_list、const_iterator_type_list)が Boost.MPL ベースではなくなり、Boost.Mp11 リストに変更された。これにより、Boost.MultiIndex は Boost.MPL に依存しなくなった。ほとんどのユーザーコードには影響しないと考えられるが、マクロBOOST_MULTI_INDEX_ENABLE_MPL_SUPPORTをグローバルに定義することで従来の動作を復元可能。Boost.MPL のレガシーサポートは将来的に非推奨化および削除される可能性がある - 破壊的変更:
composite_keyおよび関連クラステンプレート(composite_key_equal_to、composite_key_compare、composite_key_hash)が可変引数テンプレートに変更された(従来はテンプレート引数の最大数がBOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZEで制限されていた)。この変更はユーザーに対して透過的であるべきだが、composite_key::key_extractorsがboost::tupleではなくstd::tupleを返すようになった点が例外である(影響を受ける他のクラステンプレートも同様) - C++11 以前のコンパイラをサポートするための内部回避策とフォールバックを削除
MSM
- 新機能 (
backmp11):- GitHub #173: 階層的ステートマシンにおける
deferred_eventsプロパティのサポートを改善 - GitHub #155:
deferred_eventsプロパティによる条件付き遅延をサポート - GitHub #175: 関数オブジェクトのシグネチャを簡素化
- GitHub #168: キューイングされたイベントと遅延イベントを単一のイベントプールに統合
- GitHub #172: イベントプール内のイベントに対する小オブジェクト最適化
- GitHub #180:
flat_foldディスパッチ戦略による実行時パフォーマンスの改善 - バージョン 1.90 と比較して、最大 25% のコンパイル時間短縮と RAM 消費量の削減をさらに最適化
- GitHub #173: 階層的ステートマシンにおける
- バグ修正 (
backmp11):- GitHub #167:
on_entry(...)およびon_exit(...)呼び出し時の不正なFSM型を修正 - GitHub #166: 完了イベントが過剰に発火する問題を修正
- GitHub #167:
- 破壊的変更 (
backmp11): イベントプールへの直接アクセスをpublicからprotectedに変更。ライブラリコード外からの操作は未定義動作を引き起こす可能性があるため
Optional
- 完全な C++11 サポート(「制限なし共用体 (unrestricted unions)」と参照修飾子を含む)を持つコンパイラにおいて、実装をaligned storageからunion storageに変更。これにより段階的な
constexprサポートが可能になった:- C++11 では、一定の制約を満たす型に対し、一部のコンストラクタおよび
const修飾付きアクセッサがコンパイル時コンテキストで使用可能になった(コア定数式) - C++14 では、一部の変更操作もコア定数式になった(
optionalの状態を「値なし」から「値あり」に変更する操作を除く)。これは協調型に対して適用される - C++17 では、すべてのコンストラクタ(コピーおよびムーブを含む)が協調型に対してコア定数式になった
- これは GitHub #132 および GitHub #143 に対応する
- C++11 では、一定の制約を満たす型に対し、一部のコンストラクタおよび
- 破壊的変更:
swapのカスタマイズ機構を廃止。このメカニズムはほとんど知られておらず、ドキュメント化もされていなかった std::optionalのインタフェースに近づけるための小さな変更:- optional オブジェクトを「値なし」状態にするための構文
o = {}を有効化 - デフォルト構築された
Tを使用する構文o.value_or({})を有効化 o = u(oはoptional<T>型、uはTに変換可能なU型) の構築において一時的なTを生成しないよう変更
- optional オブジェクトを「値なし」状態にするための構文
- GitHub #142
optional<T>&からoptional<T&>への変換を追加 none_tがstd::equality_comparableになり、none_tとoptional<T>がstd::equality_comparable_withコンセプトをモデル化するようになった(std::equality_comparableなTに対して)。これにより、optional オブジェクトの範囲に対してstd::ranges::find(rng, boost::none)が使用可能になった- 警告: 将来のリリースで
optionalにRangeインタフェースを導入する予定であり、std::ranges::range<optional<T>>がtrueになる。これはstd::ranges::rangeなどの述語に基づいて判断するプログラムのオーバーロード解決に影響する
template <typename T> void serialize(T const& v) { if constexpr (std::ranges::range<T>) serialize_as_range(v); else if constexpr (custom::is_optional_like<T>) serialize_as_optional(v); else serialize_as_value(v); }
PFR
- 実験的な C++26 リフレクションベースの実装を追加。有効にするにはマクロ
BOOST_PFR_USE_CPP26_REFLECTIONを1に定義する boost::pfr::for_each_field*()関数が状態をもつビジターで正しく動作するようになった
Stacktrace
- 互換性のないランタイムに対するコンパイル時チェックを削除。これにより誤検知がなくなり、
from_exception機能がそのまま動作するようになった。互換性のない/リークするランタイムのまれなケースはランタイムで報告されるようになった - GitHub #219 cygwin で
from_exceptionを無効化。David McFarland氏の PR に感謝 has_addr2lineの C++ 標準ライブラリとのリンクを削除し、システムデフォルトでないlibstdc++.soでのビルドを簡素化
System
operator|(result<T&>, U)の戻り値型を非参照に変更r & fでメンバへのポインタをサポート(boost::compat::invokeを使用)- ライブラリがヘッダオンリーであるにもかかわらず、CMake config ファイルをインストールするようになった。これは
find_package(Boost COMPONENTS system ...)を含むサードパーティのCMakeLists.txtファイルの破壊を回避するため - C++20 以降で
error_codeがさらにconstexpr化 resultにunsafe_valueを追加result<>::operator*およびresult<>::operator->が!has_value()の場合に例外をスローするよう変更(従来は事前条件)。従来の動作はunsafe_value()で記述boost/system/unwrap_and_invoke.hppを追加
TypeIndex
- C++20 以降の CTTI 型比較を最適化
ctti_type_index::name()が C++14 以降のモダンな C++ 標準でデフォルトで整形された値を返すよう変更。ライブラリバイナリのサイズを削減
Unordered
- GitHub #344 並行コンテナにおける範囲挿入の戻り値を修正
UUID
boost/uuid/uuid_io.hppにfrom_charsを追加string_generatorにnoexceptなoperator()オーバーロードを追加string_generatorがcharとwchar_tに加えて Unicode 文字型をサポート- C++14 以降かつ最近のコンパイラにおいて、ほとんどの
uuidアクセサ・操作・to_charsが可能な限りconstexprになった to_charsの SIMD 実装を追加。UUID のフォーマットで最大 5.5 倍のパフォーマンス改善(Andrey Semashev氏)from_charsの SIMD 実装を追加。UUID のパースで最大 13 倍のパフォーマンス改善(Andrey Semashev氏)boost/uuid/uuid_io.hppにuuid_from_stringを追加- 後方互換性のために
std::runtime_errorから派生した専用のinvalid_uuid例外クラスを追加
Variant2
holds_alternative<T>およびget<T>が、Tが代替型のリストに正確に1回出現する必要がなくなり、少なくとも1回出現すればよいよう緩和された
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang, C++03: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0, 13.0.0, 14.0.0, 15.0.0
- Clang, C++11: 3.4, 11.0.0, 13.0.0, 14.0.0, 15.0.0
- Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
- Clang, C++17: 6.0.1, 7.0.0, 8.0.0, 9.0.0, 10.0.0, 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
- Clang, C++20: 11.0.0, 12.0.0, 13.0.0, 14.0.0, 15.0.0
- GCC, C++03: 4.6.3, 11, 12
- GCC, C++11: 4.7.3, 4.8.5, 11, 12
- GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11, 12
- GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11, 12
- GCC, C++20: 8.0.1, 9.1.0, 10, 11, 12
- OS X:
- Apple Clang, C++03: 11.0.3
- Apple Clang, C++11: 11.0.3
- Apple Clang, C++14: 11.0.3
- Apple Clang, C++17: 11.0.3
- Apple Clang, C++20: 11.0.3
- Windows:
- Visual C++: 10.0, 11.0, 12.0, 14.0, 14.1, 14.2, 14.3