最終更新日時:
が更新

履歴 編集

Boost 1.82.0リリースノート

本家リリースノート:

リポジトリは以下:

リポジトリからのビルド方法は、egtraさんのブログを参照:

既知の問題

  • Filesystem
    • OpenBSD で共有ライブラリのコンパイラフラグ -Wl,--no-undefined のサポートが壊れているため、コンパイルに失敗することがある。GitHub #283、およびパッチを参照
    • Windowsにおいて、SMBv1共有のディレクトリに対するdirectory iteratorの作成が ERROR_INVALID_LEVEL エラーコードで失敗することがある。GitHub #284、およびパッチを参照

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

  • GitHub #25 非推奨の utility/enable_if.hpp の代わりに core/enable_if.hpp ヘッダを使用するようになった。PRをくれたMichael Ford氏に感謝

Asio

  • 操作が即座に完了した場合の完了ハンドラの実行をカスタマイズする機能を追加
  • バッファタイプにユーザー定義のリテラルを追加
  • SOCK_SEQPACKETAF_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_sendcancel の後に失敗するのを修正
  • プールに内部スレッドがない場合の 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_composedawaitable<>コルーチンのソースロケーションを追跡するハンドラの欠落をサポートした
  • いくつかの「潜在的なヌル参照」警告とシャドウ変数警告を修正
  • const_buffers_1mutable_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_operationcompletion_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_valuestd::nullopt_tに対するオーバーロードを追加
  • is_tuple_likeと、hash_valueのtuple-like型に対するオーバーロードを追加
  • stringのハッシュ化として、品質と速度の両方の改善のためにmulxp1_hashを使用するよう修正

Core

  • boost/core/snprintf.hpp ヘッダーを追加し、snprintfvsnprintf およびそれらの wchar_t 対応のポータブル定義を追加
  • 非推奨のヘッダ boost/core/is_same.hppboost::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
  • 破壊的変更
    • 空の多角形のWKT出力表現がPOLYGON()になり、他のジオメトリとの整合性が取れるようになった

Histogram

  • detail::spandetail::make_spanboost::core の実装に置き換えた
  • ドキュメントを改善
  • いくつかのケースで std::minstd::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_001en_150など)に対応
  • GitHub #148 en_US_POSIXC ロケールのエイリアスとして扱うようにした
  • 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モードでの冗長な定義を削除
  • スタンドアローンの itruncltrunc のエラーハンドリングを修正
  • 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_forwait_until を非推奨とした。これらは将来的に削除される予定です!

Stacktrace

  • GitHub #132 ドキュメントとコメントの誤字を修正。PRをくれたChocobo1氏に感謝
  • BOOST_STACKTRACE_BACKTRACE_FORCE_STATIC が定義されている場合の backtrace_create_state のマルチスレッドフラグの検出を修正

StaticString

  • Boost.Coreのstring_viewstd::string_viewの相互運用をできるよう修正

Test

  • いくつかの未使用変数の警告を修正
  • sprintfの非推奨の警告を修正
  • basic_cstring::rfindの未定義動作を修正
  • GitHub ActionsでのCIを追加

Unordered

  • メジャーアップデート
  • ノードベースで、オープンアドレッシングなコンテナboost::unordered_node_mapboost::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

翻訳

Akira Takahashi