本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_82_0.qbk
- http://www.boost.org/users/history/version_1_82_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
既知の問題
- Filesystem
- OpenBSD で共有ライブラリのコンパイラフラグ
-Wl,--no-undefinedのサポートが壊れているため、コンパイルに失敗することがある。GitHub #283、およびパッチを参照 - Windowsにおいて、SMBv1共有のディレクトリに対するdirectory iteratorの作成が
ERROR_INVALID_LEVELエラーコードで失敗することがある。GitHub #284、およびパッチを参照
- OpenBSD で共有ライブラリのコンパイラフラグ
C++03サポートの終了
以下のライブラリは、いまから2リリース後の1.84.0でC++03のサポートを終了する:
- Align
- Any
- Asio
- Atomic
- Bind
- Chrono
- ContainerHash
- Conversion
- DLL
- Endian
- Filesystem
- Function
- Functional
- Io
- LexicalCast
- Log
- Random
- Ratio
- SmartPtr
- System
- Stacktrace
- Thread
- Timer
- TypeIndex
- Typeof
- Unordered
- Variant
このリリース(1.82)と次のリリース(1.83)は、上記のライブラリとその依存関係の大部分でC++03をサポートする最後のリリースとなる。
古いバージョンのコンパイラでは、サポート不足やバグのためにC++11が部分的にしか実装されていないことが多いため、どのコンパイラがC++11の要件を満たしているとみなされるかは、ライブラリによって異なる場合がある。
しかし、一般的なルールとして、コンパイラがC++11のキーワードや構文をまったく認識しない場合(例:noexceptの使用、constexprの使用、=deleteされた関数を定義すると即コンパイルエラー)、コンパイラがC++11必須のヘッダーをまったく提供しない場合(例:<atomic> や <chrono> をインクルードしようとすると失敗する)、あるいはコンパイラがC++11の機能やヘッダを提供するがまったく使用できない場合、このコンパイラはC++11コンパイラとはみなされない。
このため、例えば14.0 (2015) 以前のMicrosoft Visual C++や、4.8以前のGCCは除外される。
新ライブラリ
- MySql
- Boost.AsioベースのMySQLデータベースサーバーのC++11クライアント (作者Reuben Perez)
更新ライブラリ
- Any
- Asio
- Atomic
- Beast
- ContainerHash
- Core
- DLL
- Filesystem
- Geometry
- Histogram
- JSON
- Locale
- Math
- Multi-index
- Multiprecision
- Nowide
- PFR
- Process
- Stacktrace
- StaticString
- Test
- Unordered
- URL
- Variant
更新ツール
Any
- GitHub #25 非推奨の
utility/enable_if.hppの代わりにcore/enable_if.hppヘッダを使用するようになった。PRをくれたMichael Ford氏に感謝
Asio
- 操作が即座に完了した場合の完了ハンドラの実行をカスタマイズする機能を追加
- バッファタイプにユーザー定義のリテラルを追加
SOCK_SEQPACKETでAF_UNIXを表現するために新しいプロトコルタイプlocal::seq_packet_protocolを追加signal_set::addのオプション引数でsigaction()フラグを公開allocator_binder,executor_binder,cancellation_slot_binderを変更して、特殊でない連想子 (unspecialised associators) の検出をサポートするようにしたassociated_cancellation_slot<reference_wrapper>::get()のあいまいさを修正std::exception_ptrを含む完了シグネチャのawaitable<>処理を修正experimental::channel<>のtry_sendがcancelの後に失敗するのを修正- プールに内部スレッドがない場合の
thread_pool::join()のデッドロックを修正 - io_uring を使用した際のパイプの
release()を修正 - バックエンドのデータ初期化およびクリーンアップの問題を修正
- 実行コンテキストのオーバーロードである
get_associated_executor()のぶら下がり参照の問題を修正 - バッファリングされたメッセージは
experimental::channel<>が閉じられても受信できるようにした ANY_COMPLETION_HANDLERの代入演算子を修正any_completion_handlerのコンストラクタが誤ってコピーされるのを防ぐために、コンストラクタを制限した- OpenSSL のオプションに
uint64_tを使用するように変更した(OpenSSL 3 に対応) - 複数の完了シグネチャを持つ
deferredの相互運用性を修正 - C++11 と C++14 の部分的なサポートを追加するためにチャネルを修正した
- パッケージ化された非同期処理を待つ際に、
co_composedとawaitable<>コルーチンのソースロケーションを追跡するハンドラの欠落をサポートした - いくつかの「潜在的なヌル参照」警告とシャドウ変数警告を修正
const_buffers_1とmutable_buffers_1を使用したときのasio::bufferオーバーロードの選択を修正- 古い Windows をターゲットにしていない限り、現在の Windows バージョンのランタイムチェックを無効にした
- バッファードストリームラッパーと
ssl::stream<>のようなムーブ構築可能なストリームとの互換性を修正 basic_socket_acceptor::async_acceptの戻り値の型が推論されるラムダとの互換性を修正- レガシーな完了トークンの
as_tupleとの互換性を修正 redirect_errorと新しい完了トークンとの互換性を修正- デストラクタからのエスケープが許可されるべき例外による Windows 特有のプログラム終了の可能性を修正した
- ブール式の不用意な
co_awaitを防止した experimental::use_coroの結果処理とカスタムアロケータのサポートを修正したis_async_operationとcompletion_signature_ofの可変引数テンプレートエミュレーション修正したexperimental::promiseのmove-from結果の不正な再利用を修正した- カスタムアロケータを使用した
experimental::coroを修正した - Windows のストリーム指向ファイルでの
seek_curの挙動を修正した - ドキュメントに様々な追加と修正を行った
- 詳細はRevision Historyを参照
Atomic
- AVX をサポートする x86 ターゲット用にコンパイルされた場合、128 ビットのアトミックロードとストアにベクタ命令が使用されるようになった
- 32-bit x86 ターゲットでは、
memory_order_seq_cstセマンティクスを持つ 64-bit アトミックロードとストアは、メモリ順序付け命令を発行するようになった - Boost.Atomic 1.73 で非推奨となった
atomic<T>::storage()アクセッサとatomic<T>::storage_type型を削除。代わりにatomic<T>::value()とatomic<T>::value_typeを使用することを推奨
Beast
source_locationでのerror_codeの使用を追加tcp_streamが、タイマーの正しい実行形式を使用するよう修正- error_categories が数値の ID を使用するよう修正
file_bodyにシークをサポート
ContainerHash
hash_valueのstd::nullopt_tに対するオーバーロードを追加is_tuple_likeと、hash_valueのtuple-like型に対するオーバーロードを追加stringのハッシュ化として、品質と速度の両方の改善のためにmulxp1_hashを使用するよう修正
Core
boost/core/snprintf.hppヘッダーを追加し、snprintf、vsnprintfおよびそれらのwchar_t対応のポータブル定義を追加- 非推奨のヘッダ
boost/core/is_same.hppとboost::core::is_sameは将来のリリースで削除される予定- 代わりに Boost.TypeTraits または C++ 標準ライブラリの型付けを使用することを推奨する
boost::refのメンバ関数と関連するメンバ関数にnoexceptをつけたboost::swap関数にnoexceptをつけた。これは、型が例外を投げないスワップ操作をサポートしているかどうかによって異なるboost::core::launderのポータブルな実装を追加alignofのポータブルな実装であるBOOST_CORE_ALIGNOFを追加std::max_align_tの移植版であるboost::core::max_align_tと、max_align_tのアライメントであるboost::core::max_alignを追加- C++17 の
std::pmr::memory_resourceと同等の移植性を持つboost::core::memory_resourceを追加 boost/core/serialization.hppを追加。これは、ライブラリがシリアライゼーションのヘッダを含めずに型の Boost.Serialization サポートを実装できるようにするプリミティブのコレクションであり、それによってライブラリがシリアライゼーションに依存するようにするstd::dataの実装であるboost::dataを追加std::sizeの実装であるboost::sizeを追加boost::spanを更新し、std::initializer_listから範囲を作成するためにboost::dataを使用するようにしたstd::identityの実装であるboost::identityを追加しました。この機能は Boost.Functional から移動した
DLL
- GitHub #57
size_tからuint32_tへの暗黙変換を回避。Travers Biddle氏のPull Requestに感謝
Filesystem
- GitHub #273 パス変換のコンストラクタ引数が寛容すぎるために発生するコンパイルエラーを修正
- GitHub #271 [v4]
path::remove_filenameが末尾のディレクトリセパレータを保持するようになった - パスからファイル名とそれに先立つディレクトリセパレータを削除する
path::remove_filename_and_trailing_separatorsを追加。この動作は Filesystem v3 のpath::remove_filenameと似ているが、v4 でも使用可能 - パス中のファイル名を置換する
path::replace_filenameを追加 - GitHub #279 ODR 違反を避けるために、ライブラリのバージョン選択の実装を更新
- GitHub #282 Windowsにおいて、SMBv1共有のファイルの属性を照会する際の回避策を追加。以前は、SMBv1共有のディレクトリは、通常のファイルとして報告される可能性があった。これは、SMBv2以降には影響しない
Geometry
- 大きな改善
- GitHub #1045 (multi)linestringsと(multi)polygons向けにgeographic bufferをサポート
- 改善
- GitHub #1114 距離比較 : dynamic geometriesのサポートを追加
- GitHub #1046
covered_by()にboxをサポートし、ジオメトリの組み合わせが増えたcovered_by(box, areal)(cartesian CSのみ)covered_by(geometry, box)
- 解決したissue
- GitHub #705 WKT : タブと改行を許可
- GitHub #1109, GitHub #1108 union向けの修正
- サンプルコードに対して様々な修正を行った
- 破壊的変更
- 空の多角形のWKT出力表現が
POLYGON()になり、他のジオメトリとの整合性が取れるようになった
- 空の多角形のWKT出力表現が
Histogram
detail::spanとdetail::make_spanをboost::coreの実装に置き換えた- ドキュメントを改善
- いくつかのケースで
std::minとstd::maxの使い方を保護- Han Jiang 氏による貢献 (min,max マクロは一般的な Windows ヘッダーによって不正に設定されるので、回避する必要がある)
- 今後、ライブラリ内で保護されていないmin,maxトークンの使用を検出するテストを追加
- 最新の clang-14 と gcc-11+ の推論ガイドをサポートするように修正した
JSON
set_at_pointerを追加boost::hashをサポート- 呼び出し元が提供するシリアライザーストレージをサポート
std::optional向けに欠落要素のためのvalue_toをサポート- エスケープ文字の内部でパーサーが中断する問題を修正
sentinel()がユニークなポインタを返すようにした
Locale
- GitHub #144
get_system_localeおよびその依存ファイルは、POSIX で定義された$LC_CTYPEよりも$LC_ALLを正しく優先するようになった utf8_codecvt::outは末尾の (UTF) サロゲートに対してpartialを返すようになった- ロケールを解析するために
boost::locale::util::locale_dataを追加 boost::locale::info::encoding()の結果が大文字であることをドキュメント化。例として"utf-8"ではなく"UTF-8"- GitHub #148 M49の国コード(
en_001やen_150など)に対応 - GitHub #148
en_US_POSIXをCロケールのエイリアスとして扱うようにした - GitHub #149 セグメンテーションのサポートがない場合(ICUがない場合)のエラーを改善した
- コンパイラの警告を修正
Math
- [C++11サポートを非推奨化] 最小の標準バージョンとしてC++14を要求する
- 最小テストコンパイラはClang-5、GCC-5、MSVC-14.1 (2017) となる
- 多項式評価のためのEstrin's methodを追加
- GitHub #939 非心分布 (non-central distributions) のさまざまな問題を修正し、より大きな非心分布に対応できるようにした
- CMake install targetを追加
- 例外のない環境で使用できないものを無効化するために
special_functions.hppを修正 - C++14で条件番号の計算 (condition number calculation) が動作するよう修正
- GitHub #923
constexprテーブル駆動関数を修正し、コードが実際にはconstexprでない場合に大幅な速度低下を避けるようにした - GitHub #894
tanh_sinhの境界処理を改善 - Linux arm64、s390x、Apple M1 のテストを追加し、128ビット
long doubleを扱うテストケースを修正 - 無限大とNaNをより良く扱うために
constexpr数学関数を改善 - 積分器 (integrators) をconst-correctにした
- GitHub #898
tanh_sinhの積分器がアンダーフローする問題を修正 - いくつかのプラットフォームがまだサポートしていないため、
std::cbrtを使用しないようにした - GitHub #892 非心t (non-central T) が偽 (spurious) の
FE_INVALID例外を発生させるのを止めた - 二項分布のエッジケースを修正
- GitHub #884
ibetaの非常に小さな引数の取り扱いを改善 ibetaでの無限大とNaNの取り扱いを改善 [@https://github.com/boostorg/math/issues/878 874]を参照してください.- GitHub #781
powm1のエラーハンドリングを改善 - 指数が超大きい (super large)、または小さいときに、root finder bracketingをより速くブラケットするよう改善
- root finderのエッジケースを修正
- 多くの雑多な警告を修正
- C++17を必要とする機能を使用する際にアサーションを追加し、古い標準バージョンでコンパイラを起動したときのエラーメッセージを改善
Multi-index
- シリアライズで
collection_size_typeの代わりにunsigned longを使用するようにし、この変更にともなってmulti_index_containerのシリアライズバージョンを2から3に上げた。collection_size_typeの値を特別扱いするカスタムアーカイブ型では、古いアーカイブの読み込みに失敗することがある。そのような場合は、読み出し操作の後方互換性を確保するためにマクロBOOST_MULTI_INDEX_ENABLE_SERIALIZATION_COMPATIBILITY_V2をグローバル定義する - メンテナンス作業
Multiprecision
- [C++11サポートを非推奨化] 最小の標準バージョンとしてC++14を要求する
- 最小テストコンパイラはClang-5、GCC-5、MSVC-14.1 (2017) となる
- 新たに先行宣言のヘッダを追加
- GitHub #479 Eigenとの相互運用性を更新し、Eigenの詳細に依存しないよう修正
- Cmake install targetを追加
- GitHub #499 スタンドアロンの場合の文字列からの
cpp_dec_float構築を修正し、より良いエラーハンドリングを実現した - GitHub #530 C++17モードでの冗長な定義を削除
- スタンドアローンの
itruncとltruncのエラーハンドリングを修正 - 8進数文字列の解析時に初期化されない可能性があるストレージを修正
- arm64 と s390x の CI テストを追加
- GitHub #506
powmのために不足していた式テンプレートの展開コードを追加
Nowide
convert_stringに(std::)stringのインスタンスをとるオーバーロードを追加- GitHub #170
path(std::filesystemもしくはboost::filesystem) のストリームへの (UTF-8)quoted出力を追加
PFR
- GitHub #111
boost::pfr::is_implicitly_reflectableを実装し、集成体をリフレクト可能か否かに特殊化させる機構を実装。Denis Mikhailov氏のPRに感謝 boost::pfr::getを集成体の要素の型に対して実装- リフレクションのライブラリサポートを検出するために
BOOST_PFR_ENABLEDマクロを実装 - GitHub #114 終端文字の欠落を修正。PR をくれた Denis Mikhailov 氏に感謝
- GitHub #118 古いコンパイラでの
boost/pfr/config.hppのコンパイルを修正。Denis Mikhailov 氏の PR に感謝 - GitHub #119 古いコンパイラで壊れた C++17 構造化束縛の回避策を追加。Denis Mikhailov 氏の PR に感謝
- GitHub #117
-Wzero-as-null-pointer-constantの警告を回避。Markus F.X.J. Oberhumer 氏による PR に感謝 - 複数のタイプミスを修正。Denis Mikhailov氏の修正に感謝
- GitHub #121 不足していた
#pragma onceを追加。PR をくれた caozhanhao 氏に感謝 - ドキュメントの複数の修正と改善
Process
- V2 に外部プロセスの管理機能を追加(まだ実験中)
- V1 では
wait_forとwait_untilを非推奨とした。これらは将来的に削除される予定です!
Stacktrace
- GitHub #132 ドキュメントとコメントの誤字を修正。PRをくれたChocobo1氏に感謝
BOOST_STACKTRACE_BACKTRACE_FORCE_STATICが定義されている場合のbacktrace_create_stateのマルチスレッドフラグの検出を修正
StaticString
- Boost.Coreの
string_viewとstd::string_viewの相互運用をできるよう修正
Test
- いくつかの未使用変数の警告を修正
sprintfの非推奨の警告を修正basic_cstring::rfindの未定義動作を修正- GitHub ActionsでのCIを追加
Unordered
- メジャーアップデート
- ノードベースで、オープンアドレッシングなコンテナ
boost::unordered_node_mapとboost::unordered_node_setを追加 - P2363で規定された異種混合ルックアップ (heterogeneous lookup) の拡張メンバ関数を追加
- オープンアドレッシングコンテナのpost-mixing前の処理を、定数による拡張乗算 (extended multiplication by a constant) に基づく新しいアルゴリズムに置き換えた
emplace内部で、スタックローカル型がコンテナのアロケータを使用して適切に構築されず、uses-allocator構築を壊していたバグを修正
URL
- 自動的に%のエンコーディングを行う
url::formatを追加 - URL routerの例を追加
set_params便利関数を追加string_viewへの暗黙変換をサポート- パースコンストラクタをimplicitにした
string_token::argが仮想デストラクタとslice protectionを持つようにしたBOOST_URL_DISABLE_THREADSをサポート- 改善とバグ修正:
WIN32_LEAN_AND_MEANが再定義された警告を修正- 欠落 (absent) と空 (empty) のコンポーネントの差分比較
- 空ポートのようなセグメントを持つ
hier_part_ruleを検出 - root上で正規化した場合のセグメント比較
- hier-part path-rootless は無効なセグメントを考慮するよう修正
- オーバーフローした場合に、ポート番号を0にするよう修正
- ipv4 から文字列のオーバーフローを検出するアルゴリズム
Variant
- GitHub #105 非推奨の
utility/addressofの代わりにcore/addressofを使用するようになった。PR をくれた Michael Ford 氏に感謝
Build
- B2バージョン4.9.4をリリース
テスト済みコンパイラ
主要なテストコンパイラ:
- 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