本家リリースノート:
- 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
をサポートし、ジオメトリの組み合わせが増えたconvered_by(box, areal)
(cartesian CSのみ)convered_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