本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_87_0.qbk
- http://www.boost.org/users/history/version_1_87_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
- Parser
- パーサー構築のフレームワーク。作者Zach Laine氏
更新ライブラリ
- Asio
- Atomic
- Beast
- Charconv
- Cobalt
- Compat
- Container
- Filesystem
- Flyweight
- Geometry
- Iterator
- Interprocess
- JSON
- LexicalCast
- Log
- Math
- Move
- Mp11
- Multiprecision
- MySQL
- Optional
- PFR
- Process
- SmartPtr
- Stacktrace
- STLInterfaces
- Test
- Unordered
- URL
- UUID
- Wave
Asio
- byte spanとそのシーケンスを、バッファシーケンスとして使用できるサポートを追加。これにより、
async_readなどのI/O操作に直接渡すことができる - 非同期操作がエラーなしで完了したかどうかをテストできるgeneric dispositionのサポートを追加。これには
error_codeとexception_ptrが含まれるが、disposition_traitsクラステンプレートの特殊化によってユーザー定義の型に拡張できる。標準型のstd::error_codeとstd::exception_ptrがディスポジションとして認識される boost::asio::use_future完了トークン、boost::asio::awaitable<>ベースのコルーチン、boost::asio::spawn()、boost::asio::experimental::cancellation_conditionにディスポジションサポートを追加execution_context::service_maker抽象基底クラスを追加。service_makerはexecution contextのコンストラクタに渡されるオブジェクトで、コンテキスト構築時にサービスを追加できるboost::asio::configを追加。execution contextに関連する設定パラメータにアクセスできる。このクラスはAsioの内部、またはAsioの上に構築されるライブラリやユーザー提供の抽象化での使用を意図しており、特定の最適化の有効化/無効化などの動作を微調整するために使用される。boost::asio::config_from_env、boost::asio::config_from_concurrency_hint、boost::asio::config_from_stringなどの具体的な設定ソースをio_contextまたはthread_poolのコンストラクタに渡すことができる- Asioの
io_contextとthread_pool実装で認識される初期設定パラメータセットを追加 - 以前に非推奨だった機能をいくつか削除
basic_io_objectとdeadline_timerを非推奨化- associating binderに右辺値修飾の
operator()オーバーロードを追加。 - モジュラービルド構造のサポートを追加
- ムーブ専用型を返す関数の
spawn()を修正 - コンセプトサポートを必要としないよう
co_composedを修正 - epollリアクターがfork後に通常のfile descriptorを再登録しないよう修正
ssl::detail::engineムーブ代入のリークを修正BOOST_ASIO_DISABLE_SMALL_BLOCK_RECYCLINGが定義されている場合のコンパイルエラーを修正- Clang 19を使用する際のコンパイルエラーを修正
thread_pool::join()を変更し、thread_pool::attach()で後に追加されるスレッドを確実に停止するようにした- ストリーム指向操作で使用される
io_uring_prep_write_fixedとio_uring_prep_read_fixedに渡されるオフセットを修正 - 詳細はRevision Historyを参照
Atomic
- GitHub #72 アトミック待機状態リストのメモリ再確保時の初期化を修正
Beast
- APIの変更
basic_fields::insert()にerror_codeオーバーロードを追加- permessage-deflateの状態を照会するための
websocket::stream::get_statusのオーバーロードを追加
- 修正
- タイムアウト時に
bad_executor例外を引き起こすhttp::basic_stream内のnet::dispatch呼び出しでのムーブ後使用を修正 - 初期化関数内の変更操作を削除
teardown_tcp_opでのキャンセル処理を修正on_finish_implを呼び出す前にbasic_parserのstate_を設定clamp関数からstatic指定子を削除- テストでの
-Wattributes警告に対処 - テストでの到達不能コード警告に対処
- タイムアウト時に
- 改善
beast::http名前空間の型の前方宣言ヘッダーを追加http::parserがerror_codeオーバーロードを使用したbasic_fields::insert()を使用できるよう修正http::basic_parserにheader_limit_をトレーラーヘッダーに適用http::basic_parserがhttp::error::header_limitをより早く返すように改善- モジュラーBoostビルド構造のサポートを追加
- 謝辞
- Jackarain, Saleh Hatefinya, René Ferdinand Rivera Morell
Charconv
__ibm128をlong double formatとして使用するPPC64LE アーキテクチャのサポートを修正- Windows ARM64プラットフォームでの組み込み関数の使用を修正
std::float128_tまたは__float128を使用した固定小数点の指定精度でのフォーマットを修正
Cobalt
get_executorで定数参照を返す要件を削除- 実験的/構成を追加
Compat
to_array.hppを追加(Ruben Perez Hidalgo氏の貢献)
Container
static_vectorとsmall_vectorにstored_sizeオプションを追加- バグ/問題を修正:
- GitHub #261 終端イテレータは参照できない問題を修正
- GitHub #288
small_vectorでflat_map::extract_sequence`を使用する際のコンパイルエラーを修正
Filesystem
- 1.84.0で発表されたように、Windows 10より前のバージョンはサポートされなくなった
- GitHub #325 Windowsでは、
canonicalがGetFinalPathNameByHandleWWinAPI関数に基づくようになった。副次的効果として、ドライブ文字は大文字に変換され、結果のパスの相互運用性が向上した - [v4:]
canonicalは、入力パスに末尾のディレクトリ区切り文字 (trailing directory separator)がある場合でも、結果のパスに末尾のディレクトリ区切り文字を生成しなくなった - GitHub #326
pathコンストラクタまたはメンバ関数が、pathに変換可能なユーザー定義型の引数と1つ以上のSource型で呼び出された場合、デフォルトでpathへの変換が選択されるようになった。これにより一部の引数変換のあいまいさが解消される可能性があるが、変換パスが最適でない場合もある。異なる変換パスが必要な場合、ユーザーには明示的な型キャストの使用を推奨される - GitHub #328 FreeBSD 9以前の
dirfdがマクロである場合の回避策を追加
Flyweight
- マルチスレッドシナリオで優れたパフォーマンスを提供する、Boost.Unorderedの並行コンテナに基づく
concurrent_factoryを追加 - GitHub #15 以前に例外送出しないとドキュメントに記載されていた
boost::flyweight操作にnoexceptを付与
Geometry
- 改善
- コードの一部で
typedefの代わりにusingを使用 - コードの一部でエイリアスを使用してメタ関数を現代化
- モジュラービルド構造のサポートを追加
- CMakeカバレッジの完全化(GitHub Actionsのcmakeテストを追加)
- ドキュメントワークフローの改善
- QtとWxWidgetsの例を更新
- C++17と23に備えて列挙を追加
- コードの一部で
- 重大な変更
- 非推奨のリスケーリングコードを削除
- 解決した問題
- GitHub #1309 一部のqbkインクルードの不足を修正
- GitHub #1226 GitHub #1326 ringに対するextra roundを修正
- GitHub #1293 GitHub #1294 GitHub #1295 クラスター化されていないリングを通過する処理を修正
- GitHub #893 GitHub #1299 和演算の条件でのブロッキングリングを修正
- GitHub #1342 touchとの組み合わせでのstart turnを破棄を修正
- GitHub #1288 GitHub #1345 (不完全な)touchの処理を修正
- GitHub #1279
covered_byの不正確な結果を修正 - エラーと警告の各種修正
Iterator
- GitHub #85
function_output_iteratorがstd::output_iteratorコンセプトに準拠するよう修正
Interprocess
- Boostの依存関係を11から7に削減。
<boost/interprocess/containers/*.hpp>ヘッダーを非推奨にした。2011年にはBoost.Containerの元ソースを参照していたが、現在はメンテナンスされていない。長期的な移行として、Boost.Interprocessはこれらのヘッダーを互換性のために維持してきた。将来のBoostリリースで削除される- Cygwinのいくつかの回避策を追加。リグレッションテストがCygwin64で動作するようになった
- ABI破壊的変更:
segment_managerが、オーバーアラインされた型をサポートし、既存のバグを修正する新しい実装を使用。Boost 1.87より前のABIを取得するには、Boost.Interprocessヘッダーをインクルードする前にBOOST_INTERPROCESS_SEGMENT_MANAGER_ABIを1として定義すること - バグを修正:
- GitHub #152
shared_memory_objectでEINTRを処理 - GitHub #173 管理共有メモリセグメントの値が整列されていない
- GitHub #192
managed_windows_shared_memoryが破壊時にクラッシュ - GitHub #199
char_wchar_holderの代入演算子でm_is_wideが不足/誤用 - GitHub #210
boost::interprocess::ipcdetail::sync_handles::obtain_mutexのバグ - GitHub #215 SPARC 32ビットでboost/interprocess/segment_managerのアラインメント問題
- GitHub #217
managed_map_fileのfind_or_constructがキャッシュアラインメントされたメモリを返さない - GitHub #230 MinGWで
interprocess::ipcdetail::intermodule_singletonが動作しない - GitHub #236
get_current_process_creation_timeの浮動小数点の不正確さによりintermodule_singletonの失敗
- GitHub #152
JSON
- 直接的なシリアライズ
- Boost.JSON型のGDBプリティプリンタを追加
- 構造体への変換で不明なキーを無視
value_toの例外ラッピング動作を簡素化- 非推奨のinitializer listの動作を削除
- 非推奨の型エイリアスを削除
- MinGW ARM64での正確な64ビット乗算を使用
- サイズの異なるタプルでの
parse_intoの処理を修正 - シーケンスの許容サイズより大きな入力サイズをチェック
- GCC 14での
value_refのセグメンテーション違反を修正
LexicalCast
- Boost.Integerへの依存性を削除し、コンパイル時間を短縮
Log
- Boost.Threadの同期プリミティブをC++標準ライブラリの同等物と置き換えた。これにより、マルチスレッドのパフォーマンスが向上する可能性があるが、ユーザー側での影響もある
- Boost.Threadのスレッド割り込み機能はサポートされなくなった。Boost.Logは、Boost.Threadによってスレッド割り込みを実装するために使用される
thread_interrupted例外に対して特別な処理を行わなくなった。この例外は他の任意の例外と同様に扱われる- とくに、ユーザー指定の例外ハンドラが
thread_interruptedのペンディング例外で呼び出されることがある
- とくに、ユーザー指定の例外ハンドラが
- timed wait操作について、タイムアウトは現在
std::chronoの時間単位を使用している。これは、bounded_ordering_queueクラスとunbounded_ordering_queueクラスがサポートするordering_windowという名前付きパラメータが、Boost.DateTimeのboost::posix_time::time_durationではなくstd::chrono::durationの値を期待することを意味している - スレッド同期プリミティブによって示されるエラーの場合、Boost.Threadの例外型の代わりに
std::system_error例外が送出される
- Boost.Threadのスレッド割り込み機能はサポートされなくなった。Boost.Logは、Boost.Threadによってスレッド割り込みを実装するために使用される
strictest_lockにC++標準ライブラリのlock型のサポートを追加
Math
- メジャーアップデート
- 多数の特殊関数および分布が、CUDA(NVCCおよびNVRTC)およびSYCLをサポートするようになった
- GitHub #1163 mapairy distribution、holtsmark distributionおよびsaspoint5 distributionを追加
- GitHub #1159 landau distributionを追加した
- GitHub #1169 beta quantileにおける予期しない例外を修正した
Move
- いくつかのバグを修正:
- Git Issue #56 std型の前方宣言が、一部のプラットフォームでコンパイルエラーを引き起こす
Mp11
mp_lambdaを追加(提供者:Joaquin M Lopez Munoz氏)
Multiprecision
float128をtrivially copyableにした__float128を非GNUモードでも浮動小数点型とみなすよう修正
MySQL
- 実験的なAPIへの破壊的変更:
connection_poolでのスレッドセーフティ機能が再設計され、ユーザーの経験によって見つかったいくつかの設計の欠陥を克服したthread_safeというboolオプションがpool_paramsに追加され、デフォルトではfalseに設定されている。設定すると、一部のプール関数が挙動を変更して並行に安全に使用できるようになる。これは内部でstrandを作成し、必要なときにそれにディスパッチし、cancel signalを再配線することで機能するpool_params::thread_safeがfalseの場合、通常のAsio executorのセマンティクスが適用され、オーバーヘッドはない
pool_executor_paramsは削除され、pool_params::connection_executorとpool_params::thread_safeに置き換えられたconnection_pool::async_get_connectionの組み込みタイムアウト機能が完全に削除された。この関数は現在、個々の操作のキャンセルをサポートしており、同じ機能はasio::cancel_afterを使用することで達成できるconnection_poolの破棄をすると、ほかのAsio I/Oオブジェクトと同様に、未処理の非同期操作がキャンセルされる。これによりリソースのリークが防止される- 利用可能なコネクションがまだない状態で
async_get_connection操作がキャンセルされた場合、操作は現在、プールの状態に応じて一貫してclient_errc::pool_not_running、client_errc::no_connection_available、またはclient_errc::pool_cancelledで失敗する client_errc::timeoutとclient_errc::cancelledが削除された- プールが実行中でない状態で
async_get_connectionを呼び出すとすぐには失敗せず、async_runの呼び出しを待つ sequenceは所有型を返すようになった。これにより、with_paramsと共に遅延非同期操作で使用することが安全になったsequenceは別のヘッダー、boost/mysql/sequence.hppに移動された
any_connection、クライアント側のSQLフォーマット(format_sqlおよびwith_paramsを含む)、およびconnection_poolを安定したAPIに昇格させたconnectionとそのエイリアスであるtcp_connection、tcp_ssl_connection、およびunix_connectionの代わりに使用する新規コードとして、any_connectionが推奨される- クエリテンプレート文字列とパラメータを包括する新しい
ExecutionRequestであるwith_paramsを追加した with_diagnosticsを追加した。これは同期的に例外を送出する関数の動作と一致するように、非同期関数によって送出される例外にdiagnosticsオブジェクトを含むアダプタ完了トークンであるwith_diagnostics(asio::deferred)は現在、any_connectionとconnection_poolのすべての操作のデフォルトの完了トークンであるconnection_poolの非同期関数は現在、操作ごとのキャンセルをサポートしている- すべての非同期操作は現在、
asio::cancel_after、asio::cancel_atおよび同様の完了トークンをサポートしている connectionとany_connectionは現在、即時の完全性をトークンの即時エグゼキュータ (immediate executor) を介してディスパッチする- 以前に接続されていない
any_connectionを使用しようとするとクラッシュする問題を修正した fieldの潜在的に例外送出可能なコンストラクタから間違ったnoexcept指定子を削除した- 設定されたバッファサイズの制限を超える可能性があった書き込みバッファサイズの問題を修正した
- ドキュメントとサンプルコードを大幅に更新し、新しい推奨されるベストプラクティスを反映させるようにした
Optional
- 破壊的変更 C++03のサポートを削除した。C++11以上を要求するようになった。少なくとも一部のC++11の機能が必要となる
- Boost.Utilityへの依存関係を削除
- Boost.Predefへの依存関係を削除
- Boost.StaticAssertへの依存関係を削除
- Boost.Moveへの依存関係を削除
- 一部の関係演算の実装をわずかに高速化した
- 警告 将来のリリースでは、
std::ranges::range<optional<T>>がtrueになるように、optionalにRangeインターフェースを導入する予定。これは、std::ranges::rangeのような、述語に基づいて決定を下すプログラムのオーバーロード解決に影響を与える可能性がある - タグ
in_place_initとin_place_init_ifがinline constexprになり、その結果、実行ファイルのフットプリントが小さくなった。これはGitHub #103の問題を解決する
PFR
- GitHub #171
boost::pfr::for_each_field_with_name関数が追加された (Lena氏に感謝) - GitHub #120 大きなサイズと小さなフィールド数を持つ構造体のコンパイル時間が大幅に改善された (Zachary Wassall氏に感謝)
pragmaディレクティブを修正- C++20モジュールへの初期サポートを追加した。詳細はドキュメントを参照
- GitHub #183, GitHub #187 core_name14_disabled.hpp内の未使用変数の警告を修正 (Anarthal (Rubén Pérez)氏に感謝)
- C++17における集成体内のフィールド数のデフォルト制限を100から200に引き上げた
- GCCが
-Wundefined-var-templateを認識していないことに関する警告を修正 - 複数の軽微なコンパイル時間の改善
Process
- (v2) Windowsでの
async_waitのキャンセルを実装した - (v2)
FORCE_DISABLE_CLOSE_RANGEを追加した - (v2) ext: BSDおよびSolarisの複数のext修正
- (v2) 未使用の
ext関数が現在コンパイルされ、operation_not_supportedエラーが与えられるようになった(IOSを含む) - (v2) 複数のリンクを修正
- (v2) リンクされたライブラリからfilesystemが削除された - 使用されるfilesystemライブラリの機能としては、ヘッダーファイルに実装があるもののみとなった
- (v1) 1.88に対する非推奨通知を追加
SmartPtr
- C++03のサポートを終了し、C++11のコンパイラが必要となる。これにはGCC 4.8以降、またはMSVC 14.0以降が含まれる
- マクロ
BOOST_SP_ENABLE_DEBUG_HOOKS、BOOST_SP_USE_STD_ALLOCATOR、BOOST_SP_USE_QUICK_ALLOCATOR、BOOST_AC_USE_SPINLOCK、BOOST_AC_USE_PTHREADS、BOOST_SP_USE_SPINLOCK、およびBOOST_SP_USE_PTHREADSにより有効化される機能は非推奨となり、将来のリリースでそのサポートは削除される
Stacktrace
- GitHub #189
boost::stacktrace_from_exceptionのCMakeターゲットが追加された (int mian氏に感謝) - GitHub #186 MSVCでの静的ビルド時に
boost_stacktrace_impl_return_nullptrをエクスポートしないようにした (huangqinjin氏に感謝) - Windows OSでclangを使用した際の、
ole32.libとDbgeng.libの自動リンクを修正した - GitHub #181 ドキュメントで欠落していた名前空間を修正した (Mats Taraldsvik氏に感謝)
- GitHub #178
std::exceptionのインクルード不足を修正した (Julien Schueller氏に感謝) - GitHub #175 GCCが報告した型の変換エラーを修正した (agent_J氏に感謝)
- GitHub #194 CLIからB2の
from_exception機能を使用できるようにした (Dmitry Arkhipov
STLInterfaces
- GitHub #71 シーケンスコンテナ
swapの誤って記録された要件を正しくした。期待される戻り値はboolではなくvoidである - GitHub #65
view_adaptor.hppのアダプターのデータメンバーに[[no_unique_address]]を追加した - GitHub #68 ClangとMSVCの最近のバージョンで
__cpp_explicit_this_parameterを介してサポートをアドバタイズしていないthisの推論を可能にした
Test
- GitHub #348 ダミー条件に対するclang tidyのサポートを修正した
- GitHub #431 clangでの動的リンクを修正した
Unordered
- メジャーアップデート
- 並行ノードベースコンテナ
boost::concurrent_node_mapとboost::concurrent_node_setを追加 - 並行コンテナに
insert_and_visit(x, f1, f2)および類似の操作を追加した。これは、挿入直後に要素を訪問することを可能にする(対照的に、insert_or_visit(x, f)は、挿入が行われなかった場合にのみ要素を訪問する) - GitHub #265 要素の安全な可変変更を可能にするため、特定の
boost::concurrent_flat_set操作内で訪問を排他的にロック - Visual Studio Natvisでは、任意のファンシーなポインタ型をサポートした。このことは、適切なNatvisカスタマイズポイント "Intrinsic" 関数がファンシーポインタ型自体に対して書かれている限り、任意のファンシーポインタ型に適用できる
- すべてのコンテナとイテレータにGDBのプリティプリンタが追加されました。ファンシーポインタを使用するアロケータを持つコンテナに対しては、ファンシーポインタ型そのものに対して適切なプリティプリンタが書かれている場合にのみ、これらは機能する
- GitHub #277 オープンアドレッシングコンテナに対する
std::initializer_listへの代入の問題を修正した - 接続コンテナの
std::initializer_listオーバーロードのinsert_{and|or}_[c]visitにコピー不可能なコールバックを渡すことができるようにした。これは内部的にコールバックのstd::reference_wrapperをイテレーターペアのオーバーロードに渡す
URL
- GitHub #856 機能追加:
set_paramsがencoding_optsをサポート - GitHub #857 リファクタリング: APIから非推奨のvariant2エイリアスを除外
- GitHub #864 リファクタリング:
query_ruleに一貫した解釈
UUID
- 1.86で間違って削除した
constexpr uuidを構築する機能を復元
Wave
- バグ修正:
- GitHub #220:C++20と空の文字列化パラメータでのセグメンテーション違反を修正 (Lu HongYi氏に感謝)
- GitHub #222:含まれるファイルの最初の行が空白の場合に行ディレクティブがない問題を修正 (Nick Nobles氏に感謝)
- ビルドの改善(モジュールビルドのサポートを含む) (René Rivera氏に感謝)
テスト済みコンパイラ
主要なテストコンパイラ:
- 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