本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_83_0.qbk
- http://www.boost.org/users/history/version_1_83_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
既知の問題
- JSON
- Windows ARM環境において、組み込み命令 (intrinsics) の欠如によりコンパイルが失敗する場合がある。GitHub #926とGitHub #927、およびパッチを参照
- Unordered
- コピー代入演算子において、存在しない要素を誤って削除してしまう問題を修正。GitHub #205、およびパッチを参照
新ライブラリ
- Compat
- 後の標準C++に追加された標準コンポーネントをC++11実装した互換性ライブラリ (作者Peter Dimov氏とコントリビューターたち)
更新ライブラリ
- Any
- Atomic
- Chrono
- Compat
- Core
- DLL
- Filesystem
- Flyweight
- Geometry
- Iterator
- JSON
- Locale
- Log
- Math
- Mp11
- Multi-index
- Multiprecision
- MySQL
- Ratio
- Test
- Timer
- Unordered
- URL
- UUID
- Variant2
更新ツール
Any
- 新たなC++11クラス
boost::anys::unique_any
を追加。held typeからのコピー or ムーブ構築を必要としないboost::any
(std::any
) の代替クラス - ドキュメントをQuickbookに移植し、Doxygenコメントをコードで使用するようにした
Atomic
- GitHub #62
const
修飾したatomic_ref
のコンパイルエラーを修正。const`修飾されたアトミックオブジェクトであっても、読み書き可能なメモリに存在しなければならないことに注意
Chrono
- 非推奨となっていたBoost.Ratioの使用部分を削除
Compat
latch.hpp
を追加。std::latch
の実装 (Christian Mazakas氏の貢献に感謝)shared_lock.hpp
を追加。std::shared_lock
の (部分的な) 実装 (Christian Mazakas氏の貢献に感謝)
Core
boost::core::type_name
に不完全型のサポートを追加boost/core/bit.hpp
のビット操作関数を最新のMSVCでconstexpr
に対応 (VS2019 update 5以降)boost/core/bit.hpp
にboost::core::byteswap
(C++23std::byteswap
の実装) を追加- yieldのプリミティブ
sp_thread_pause
,sp_thread_yield
,sp_thread_sleep
を、SmartPtrライブラリの実装詳細からboost/core/yield_primitives.hpp
に移動
DLL
- GitHub #58 glibc 2.36+でのテスト失敗を修正。Đoàn Trần Công Danhのバグ報告に感謝
Filesystem
- パスで識別されるディレクトリエントリの内部キャッシュファイルの状態を更新する
directory_entry::refresh
メンバ関数を追加 - [v4]
directory_entry
のコンストラクタや変更関数でパスを初期化したり変更したりすると、自動的にrefresh
が呼び出されるようになった。これにより、v3以前やv3ではファイルステータスのファイルシステムへの問い合わせが失敗した場合 (ファイルが存在しない場合など)、表示されなかったエラーが発生する可能性がある。この新しい動作はstd::filesystem
に似ている - v4
file_status
パラメータを受け取るdirectory_entry
コンストラクタとメソッドが削除された。これらの引数を取り除き、directory_entry
が内部的にrefresh
を呼び出すようにすることを推奨する - std::filesystem と同様に、ファイルのファイルタイプをチェックするための
directory_entry
のメンバ関数を追加した - ファイルの状態を検査する関数を追加した:
is_block_file
,is_character_file
,is_fifo
,is_socket
およびis_reparse_file
- GitHub #288
recursive_directory_iterator
は、ファイルシステムのイテレート処理中に取得したファイルタイプに関する情報を再利用するようになった。これにより、パフォーマンスが向上する可能性がある - GitHub #280 標準ライブラリのファイルストリームがムーブ可能な場合、
boost/filesystem/fstream.hpp
で定義されたファイルストリームもムーブ可能になった - 最初の引数に
path
をとる移植可能なfopen
オーバーロードを持つ新しいヘッダーboost/filesystem/cstdio.hpp
を追加した。この関数はstd::fopen
と等価だが、Windows ではパスにネイティブのワイド文字エンコーディングを使用する - GitHub #285 汎用的な
path
比較演算子がより制限されるようになり、ユーザーのコードにusing namespace boost::filesystem;
ディレクティブが含まれている場合に、潜在的な曖昧さを回避できるようになった - GitHub #287 イテレータからの
path
コンストラクタがstd::initializer_list
引数を取る関数のオーバーロードと干渉する可能性があった問題を修正 - GitHub #284, GitHub #286 Windows で、directory iteratorを作成する際に様々なファイルシステムから返されるエラーに対する回避策を追加
- GitHub #290 Windows で、ファイル時間の照会に必要なアクセス権を緩和
Flyweight
boost::flyweight
にスマートポインタ構文 (元の値への間接参照を行うoperator*
とoperator->
) を追加- GitHub #12
simple_locking
で使われるミューテックスが再帰的でなかったのを修正
Geometry
- 改善
- GitHub #1140 依存関係を削除し、いくつかの箇所で boost を std に置き換えた
- GitHub #1154 不足していたヘッダを追加し、すべてのヘッダがBoostのポリシーに従って独立してコンパイルできるようにした
- GitHub #1157
calculate_point_order
でconst Ring
のコンセプトをチェックする
- 解決済みの問題
- GitHub #1100
union
の修正 - GitHub #1139 異なるジオメトリタイプの修正
- GitHub #1158 凸包の修正
- GitHub #1161 頂点に極を持つジオメトリのアルゴリズム内の修正1
- 様々なエラーと警告の修正
- GitHub #1100
Iterator
is_iterator
型特性を追加し、その型がイテレータ型として適格かどうかをテストできるようになった- GitHub #79
filter_iterator
は、適応されたイテレータと関数オブジェクトのムーブ構築をサポートするようになった
JSON
- このライブラリはメモリ割り当てに失敗した場合を除き、
system_error
を例外送出するようにした。ただし、メモリ割り当てに失敗した場合はstd::bad_alloc
が送出される - シリアライズの動作を
serialize_options
で変更できるようになった - 文脈変換
- より正確な数値解析を行うためのパーサーオプション
- ストリーム
operator<<
でparse_options
をサポートした - JSON リテラルの
Infinity
とNaN
を許可するパーサーオプション - 数値のパースではなく、数値の検証のみを行うパーサーモード
- 指数が
INT_MAX
より大きい数値はパーサーに受け入れられ、無限大として扱われる object
メンバ関数を強い保証をするよう修正したboost/range.hpp
がインクルードされている場合のend
呼び出しのあいまいさを修正した- ASan の失敗を修正した
error::size_mismatch
のエラーメッセージを修正したconst
要素を持つタプルへの変換を修正した
Locale
- GNU gettextの動作にマッチするメッセージカタログファイルにおいて、ビット演算子/バイナリ演算子(左/右シフト、バイナリand/or/xor/not)がサポートされなくなった
- Windows の Std バックエンドは、要求されたロケールが存在しない場合、システムロケールの代わりにクラシックロケールを使用するようになった
localization_backend_manager::get
は非推奨。代わりにジェネレーターを使用することto_utf
/from_utf
/between
に代わる新しいコンバータークラスを追加した- フォーマット文字列の無効なインデックスに関する未定義動作を修正した
- ICU のない Windows で iso-2022-jp などへの UTF 変換を修正した
- 複数形翻訳のカウントパラメーターとして
long long
を使用するようにした - いくつかのクラスのムーブと例外指定を修正した
Log
- GitHub #209
text_file_backend
で、フォーマットされたログレコードのサイズがrotation_size
の制限を超えた場合に無限ループになる可能性があった問題を修正
Math
- GitHub #921 Daubechiesスケーリング関数のフーリエ変換の数値評価を追加
- GitHub #946 統計分布に
logcdf
関数を追加した - GitHub #978 C++23 の
<stdfloat>
型のサポートを追加した - 様々な
-Wmaybe-uninitialized
警告を修正した - GitHub #968 表現不可能な数値の
round
とtrunc
関数を修正した - GitHub #976 F 分布の最頻値の計算を修正した
- GitHub #977 ベータ分布のオーバーフローを修正した
- GitHub #987 超幾何分布のオーバーフローを修正
- GitHub #997 中央値が 0 でない場合の絶対偏差の中央値の計算を修正した
Mp11
mp_from_sequence
,mp_iota
,mp_iota_c
に offset/from パラメータを追加mp_value
,mp_list_v
,mp_rename_v
,mp_is_value_list
を追加<<boost/mp11/list.hpp>
のプリミティブに値リストのサポートを追加- 値リストのサポートを
mp_repeat
、mp_fill
、mp_at
、mp_back
、mp_take
、mp_pop_back
、mp_drop
、mp_insert
、mp_erase
に追加
Multi-index
- GitHub #68 non-unique ordered indicesのRange版
insert
を更新し、等価な要素の挿入順序を保持するようにした - シリアライズで
multi_index_container
のサイズの保存と読み込みにunsigned long
ではなくstd::size_t
を使用するようになった (LLP64 データモデルではunsigned long
はstd::size_t
より小さい)。この変更にともない、multi_index_container
のシリアライズバージョンが 3 から 4 に変更された
Multiprecision
- GitHub #542 rational adapter divisionのバグを修正
- GitHub #552 マルチスレッド環境でのグローバルプレッションの変更の処理を修正
- GitHub #555
cpp_int::eval_convert_to
の `noexcept 指定を修正
MySQL
- メジャーアップデート
- データを生成する
SELECT
ステートメントとOUT
パラメータを持つプロシージャを含むストアドプロシージャが完全にサポートされた。これにより、セミコロンで区切られた複数のステートメントを 1 回の呼び出しで実行できるようになった - 静的に型付けされたインターフェースが追加され、Boost.Describe構造体とタプルを使用して、クエリ結果をユーザーが提供した型に解析できるようになった
- テキストクエリとプリペアドステートメントは、新しい
connection::execute
関数とconnection::start_execution
関数(とその非同期関数)を使って実行できるようになった。これらはconnection::query
、connection::execute_statement
、connection::start_query
、connection::start_statement_execution
の上位関数である。新しい関数により、静的インターフェースのような新しい機能にアクセスできるようになった - ビルド時間を短縮するために、独立したコンパイルモードが追加された。ソースは
boost/mysql/src.hpp
に含まれており、正確に1つの翻訳ユニットに含める必要がある statement::bind
とconnection::execute
を使用して、イテレータペアでパラメータを指定してプリペアドステートメントを実行できるようになった。これにより、コンパイル時にパラメータの数や型がわからない場合に使用できるようになったbool
型、std::optional
型、boost::optional
型のパラメータを使用できるようになった- エラーコードを追加し、MySQL v8.0.33 および MariaDB v11.0 との互換性を確認した
- Windows の
min()
とmax()
マクロの潜在的な問題を修正した - すべてのアサーションが Boost.Assert を使用するようになった。
- すべての例外は Boost.ThrowException によってスローされるようになった
- 即時完了が I/O object executorを通して正しくディスパッチされるようになった
Ratio
- デフォルトの
BOOST_RATIO_VERSION
を 2 に変更した BOOST_RATIO_EXTENSIONS
のサポートは非推奨となり、Boost.Ratio が標準の<ratio>
ヘッダとして実装されたときに削除される予定
Test
- CIシステムに古いプラットフォームを追加した
- GitHub #353
uintptr_t
の取り扱いを修正し、32 ビットシステムでも移植できるようにした - GitHub #375
Wdeprecated-copy-dtor
と-Wdeprecated-copy-with-user-provided-dtor
の警告を修正した - GitHub #382 C++23
<stdfloat>
型のcheck_is_close
の処理を修正した
Timer
- Boost.Chrono、Boost.Systemなどへの依存を削除
BOOST_TIMER_ENABLE_DEPRECATED
が定義されていない限り、非推奨のヘッダーを無効にするようにした
Unordered
- メジャーアップデート
- オープンアドレッシングに基づく高速でスレッドセーフなハッシュマップ
boost::concurrent_flat_map
を追加した - オープンアドレッシングコンテナのイテレート処理を高速化
- オープンアドレッシングコンテナにおいて、以前はなにも返さなかった
erase(iterator)
が、次の要素へのイテレータに変換可能なプロキシオブジェクトを返すようになった。これにより、返されたプロキシが使用されない場合に、パフォーマンス上のペナルティを負うことなく、典型的なit = c.erase(it)
イディオムを使用できるようになった
URL
- GitHub #757
parse_query
でstring_view
を作り直さないよう修正 - GitHub #756
url_view
/string_view
のコンストラクタが、url_view_base
を要求するようにした - GitHub #711
IP-literal
がIPv6addrz
になれるようにした
UUID
- GitHub #138 AVX ターゲット用に生成される x86 コードを改善。SSE3 ターゲットでの
lddqu
命令の使用を削除した。これは Intel NetBurst CPU ではパフォーマンスが低下するが、Skylake 以降の CPU では最適である
Variant2
uses_double_storage()
を追加
Build
- B2 version 4.10.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