本家リリースノート:
- 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
- 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
がGetFinalPathNameByHandleW
WinAPI関数に基づくようになった。副次的効果として、ドライブ文字は大文字に変換され、結果のパスの相互運用性が向上した - [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
指定子を削除した- 設定されたバッファサイズの制限を超える可能性があった書き込みバッファサイズの問題を修正した
- ドキュメントとサンプルコードを大幅に更新し、新しい推奨されるベストプラクティスを反映させるようにした
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