最終更新日時:
が更新

履歴 編集

Boost 1.91.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

  • Decimal
    • IEEE754 10進浮動小数点数の実装。作者Matt Borland氏、Christopher Kormanyos氏

更新ライブラリ

Any

  • CMake における import std の検出を修正
  • boost::anys::basic_any の実装を簡素化

Core

  • GitHub #90 ヘッダ boost/is_placeholder.hpp を Bind から Core へ移動

Describe

  • C++20 において、囲むクラスがまだ不完全な場合でも、記述されたネストされた列挙型が動作するようになった(Julien Blanc氏の貢献)
  • enum_to_stringconstexpr 化(Julien Blanc氏の貢献)

DynamicBitset

  • operator-( const bit_iterator_base< Iter > & lhs, const bit_iterator_base< Iter > & rhs ) に対する不足していた friend 宣言を追加
  • 生ポインタをイテレータとして使用する標準ライブラリ実装でのコンパイルを修正
  • from_block_range() がビットセットの未使用部分にビットを設定しないよう修正

Exception

  • カスタマイズ可能なシリアライゼーション API を追加。Boost.JSON および nlohmann/json の組み込みサポート付き

JSON

  • std::initializer_list からの value の構築を value_from を使用するよう変更

LEAF

  • カスタマイズ可能なシリアライゼーション API を追加。Boost.JSON および nlohmann/json の組み込みサポート付き
  • Windows 上で DLL 境界を越えた LEAF エラーオブジェクトの使用をサポート(デフォルトでは無効)
  • 内部 TLS API の改善(例: Win32、組み込み)
  • 診断システムおよび on_error 実装の改善
  • 実装品質の改善(例: noexcept のより正確な使用)
  • 非推奨の verbose_diagnostic_info を削除(diagnostic_details に置換済み)

LexicalCast

  • C++20 モジュール boost.lexical_cast の初期バージョンを実装

MultiIndex

  • 破壊的変更: ライブラリが受け入れまたは提供するすべての型リスト(indexed_bytag、ネストされた typedef index_specifier_type_listindex_type_listiterator_type_listconst_iterator_type_list)が Boost.MPL ベースではなくなり、Boost.Mp11 リストに変更された。これにより、Boost.MultiIndex は Boost.MPL に依存しなくなった。ほとんどのユーザーコードには影響しないと考えられるが、マクロ BOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT をグローバルに定義することで従来の動作を復元可能。Boost.MPL のレガシーサポートは将来的に非推奨化および削除される可能性がある
  • 破壊的変更: composite_key および関連クラステンプレート(composite_key_equal_tocomposite_key_comparecomposite_key_hash)が可変引数テンプレートに変更された(従来はテンプレート引数の最大数が BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE で制限されていた)。この変更はユーザーに対して透過的であるべきだが、composite_key::key_extractorsboost::tuple ではなく std::tuple を返すようになった点が例外である(影響を受ける他のクラステンプレートも同様)
  • C++11 以前のコンパイラをサポートするための内部回避策とフォールバックを削除

MSM

  • 新機能 (backmp11):
    • GitHub #173: 階層的ステートマシンにおける deferred_events プロパティのサポートを改善
    • GitHub #155: deferred_events プロパティによる条件付き遅延をサポート
    • GitHub #175: 関数オブジェクトのシグネチャを簡素化
    • GitHub #168: キューイングされたイベントと遅延イベントを単一のイベントプールに統合
    • GitHub #172: イベントプール内のイベントに対する小オブジェクト最適化
    • GitHub #180: flat_fold ディスパッチ戦略による実行時パフォーマンスの改善
    • バージョン 1.90 と比較して、最大 25% のコンパイル時間短縮と RAM 消費量の削減をさらに最適化
  • バグ修正 (backmp11):
    • GitHub #167: on_entry(...) および on_exit(...) 呼び出し時の不正な FSM 型を修正
    • GitHub #166: 完了イベントが過剰に発火する問題を修正
  • 破壊的変更 (backmp11): イベントプールへの直接アクセスを public から protected に変更。ライブラリコード外からの操作は未定義動作を引き起こす可能性があるため

Optional

  • 完全な C++11 サポート(「制限なし共用体 (unrestricted unions)」と参照修飾子を含む)を持つコンパイラにおいて、実装をaligned storageからunion storageに変更。これにより段階的な constexpr サポートが可能になった:
    • C++11 では、一定の制約を満たす型に対し、一部のコンストラクタおよび const 修飾付きアクセッサがコンパイル時コンテキストで使用可能になった(コア定数式)
    • C++14 では、一部の変更操作もコア定数式になった(optional の状態を「値なし」から「値あり」に変更する操作を除く)。これは協調型に対して適用される
    • C++17 では、すべてのコンストラクタ(コピーおよびムーブを含む)が協調型に対してコア定数式になった
    • これは GitHub #132 および GitHub #143 に対応する
  • 破壊的変更: swap のカスタマイズ機構を廃止。このメカニズムはほとんど知られておらず、ドキュメント化もされていなかった
  • std::optional のインタフェースに近づけるための小さな変更:
    • optional オブジェクトを「値なし」状態にするための構文 o = {} を有効化
    • デフォルト構築された T を使用する構文 o.value_or({}) を有効化
    • o = u (ooptional<T> 型、uT に変換可能な U 型) の構築において一時的な T を生成しないよう変更
  • GitHub #142 optional<T>& から optional<T&> への変換を追加
  • none_tstd::equality_comparable になり、none_toptional<T>std::equality_comparable_with コンセプトをモデル化するようになった(std::equality_comparableT に対して)。これにより、optional オブジェクトの範囲に対して std::ranges::find(rng, boost::none) が使用可能になった
  • 警告: 将来のリリースで optional にRangeインタフェースを導入する予定であり、std::ranges::range<optional<T>>true になる。これは std::ranges::range などの述語に基づいて判断するプログラムのオーバーロード解決に影響する
    template <typename T>
    void serialize(T const& v)
    {
      if constexpr (std::ranges::range<T>)
        serialize_as_range(v);
      else if constexpr (custom::is_optional_like<T>)
        serialize_as_optional(v);
      else
        serialize_as_value(v);
    }
    

PFR

  • 実験的な C++26 リフレクションベースの実装を追加。有効にするにはマクロ BOOST_PFR_USE_CPP26_REFLECTION1 に定義する
  • boost::pfr::for_each_field*() 関数が状態をもつビジターで正しく動作するようになった

Stacktrace

  • 互換性のないランタイムに対するコンパイル時チェックを削除。これにより誤検知がなくなり、from_exception 機能がそのまま動作するようになった。互換性のない/リークするランタイムのまれなケースはランタイムで報告されるようになった
  • GitHub #219 cygwin で from_exception を無効化。David McFarland氏の PR に感謝
  • has_addr2line の C++ 標準ライブラリとのリンクを削除し、システムデフォルトでない libstdc++.so でのビルドを簡素化

System

  • operator|(result<T&>, U) の戻り値型を非参照に変更
  • r & f でメンバへのポインタをサポート(boost::compat::invoke を使用)
  • ライブラリがヘッダオンリーであるにもかかわらず、CMake config ファイルをインストールするようになった。これは find_package(Boost COMPONENTS system ...) を含むサードパーティの CMakeLists.txt ファイルの破壊を回避するため
  • C++20 以降で error_code がさらに constexpr
  • resultunsafe_value を追加
  • result<>::operator* および result<>::operator->!has_value() の場合に例外をスローするよう変更(従来は事前条件)。従来の動作は unsafe_value() で記述
  • boost/system/unwrap_and_invoke.hpp を追加

TypeIndex

  • C++20 以降の CTTI 型比較を最適化
  • ctti_type_index::name() が C++14 以降のモダンな C++ 標準でデフォルトで整形された値を返すよう変更。ライブラリバイナリのサイズを削減

Unordered

  • GitHub #344 並行コンテナにおける範囲挿入の戻り値を修正

UUID

  • boost/uuid/uuid_io.hppfrom_chars を追加
  • string_generatornoexceptoperator() オーバーロードを追加
  • string_generatorcharwchar_t に加えて Unicode 文字型をサポート
  • C++14 以降かつ最近のコンパイラにおいて、ほとんどの uuid アクセサ・操作・to_chars が可能な限り constexpr になった
  • to_chars の SIMD 実装を追加。UUID のフォーマットで最大 5.5 倍のパフォーマンス改善(Andrey Semashev氏)
  • from_chars の SIMD 実装を追加。UUID のパースで最大 13 倍のパフォーマンス改善(Andrey Semashev氏)
  • boost/uuid/uuid_io.hppuuid_from_string を追加
  • 後方互換性のために std::runtime_error から派生した専用の invalid_uuid 例外クラスを追加

Variant2

  • holds_alternative<T> および get<T> が、T が代替型のリストに正確に1回出現する必要がなくなり、少なくとも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

翻訳

Akira Takahashi