最終更新日時:
が更新

履歴 編集

Boost 1.85.0リリースノート

本家リリースノート:

リポジトリは以下:

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

既知の問題

  • Container
    • flat_map/flat_setコンテナが、未定義動作が原因でいくつかのコンパイラでクラッシュしたり、無効な結果を返すことがある。GitHub #273およびパッチを参照

新ライブラリ

  • CharConv
    • C++11での<charconv>の高品質な実装 (作者Matt Borland氏)
  • Scope
    • Scope Guardユーティリティとunique_resourceラッパーのコレクション (作者Andrey Semashev氏)

更新ライブラリ

更新ツール

Asio

  • 左辺値修飾された完了シグネチャを正しく処理するために、async_resultプライマリテンプレートのコンセプトチェックを修正
  • 完了トークンアダプタbind_allocatorbind_executorbind_immediate_executorbind_cancellation_slotを使用して互いをアダプトさせる際に発生する可能性があるいくつかのコンパイルエラーを修正
  • experimental::ranged_parallel_group操作を変更し、完了ハンドラを呼び出す際にcompletion_order vectorをムーブするようにした
  • ip::basic_resolver_queryio_context::strandcoroutineで非推奨の暗黙のコピーコンストラクタに関する警告を修正
  • Winsockの初期化に使用されるバージョン指定を更新
  • キャンセルによって発生した例外を完了ハンドラに正しく伝播するようにco_spawnを修正
  • awaitable<>の内部ストレージにおける未定義の動作を修正するために、std::launderの呼び出しを追加
  • Windowsのファイルサポートの実装において、file_base::appendフラグの処理が欠落していたのを修正
  • ioctlの呼び出しが失敗した場合、ソケットとディスクリプタの実装を更新し、fcntlにフォールバックするケースを追加
  • boost/asio/experimental/parallel_group.hppヘッダが自己完結するように修正
  • channelとexperimental::coroが同じ翻訳単位で使用された場合に発生していたコンパイルエラーを修正
  • ドキュメントに欠落していたCancellationSlotの型要件を追加
  • 非同期操作の開始関数の推定戻り値型に対するドキュメントのハイパーリンクを修正
  • その他の小さなドキュメント更新

Atomic

  • GitHub #65 RISC-Vでpause命令のサポートを追加

Beast

  • API変更
    • ステータスコードのリストを、IANAレジストリに準拠するよう更新
  • 修正
    • buffers_cat.hpp での到達不能コードの警告を修正
    • websocker_server_awaitable サンプルコードの接続エラー処理を修正
    • 高度なサーバーのサンプルコードにおける async_write の並行呼び出しを修正
    • zlib 名が minizip と競合する問題を修正
    • ホスト文字列が SSL_set_tlsext_host_name() 呼び出しのあとに更新されるべきであった問題を修正
  • 改善
    • asio::associatorbind_wrapperbind_front_wrapper 向け特殊化を追加
    • error categoryのmessage関数に、アロケータを指定しないオーバーロードを追加
  • ドキュメント
    • http::message::prepare_payload() は、必要がなければ呼び出さなくてよいと規定した
    • basic_stream::expires_after() の影響を受ける操作を記載
    • teardown()async_teardown() はカスタマイズポイントであることを記載
    • http::serializer の最初の使用後にムーブまたはコピーすることは未定義動作であることを記載
    • WebSocket::permessage_deflate は WebSocket ハンドシェイクを行う前に設定すべきであることを記載
    • http read 操作の bytes_transferred は HTTP パーサーが消費したバイト数を報告することを記載
  • 謝辞
    • Emile Cormier, JohannesWilde, yhzx233

Bimap

  • GitHub #42 bimap内で使用するサブコンテナ (set_ofunordered_set_of) の異種混合ルックアップ (heterogeneous lookup) を修正

Bind

  • C++03のサポートを終了。C++11コンパイラを要求するようになった
    • GCCは4.7以降、MSVCは12.0 (VS 2013) 以降

Conversion

  • GitHub #28 ライブラリの一部ではなくなったboost::lexical_cast関連の古い記述を削除 (Danil Sidoruk氏のPRに感謝)

Core

  • 生の関数を関数オブジェクトクラスでラップするためのfunctorクラステンプレートを持つ新しいboost/core/functor.hppヘッダを追加
  • null_deleterfclose_deleter、チェックされたデリーター定義を変更し、引数依存の名前探索 (ADL) で名前空間boostが持ち込まれないようにした。ユーザーは、呼び出される関数の名前空間を明示的に修飾するか、using宣言を追加する必要があるかもしれない

Filesystem

  • path::generic_pathpath::generic_stringメソッドは、返されるパスの中の重複したディレクトリセパレータを削除するようになった
  • [v4:] path::generic_pathpath::generic_stringpath::make_preferredpath::lexically_normalは、パスのルート名におけるバックスラッシュとフォワードスラッシュの変換を避けるようになった。例として、Windows上でpath("\\\\\\\\?\\\\c:\\\\foo").generic_string()は、"//?/c:/foo"の代わりに"\\\\\\\\?\\\\c:/foo"を返すようになった。同様に、path("\\\\\\\\host/share/foo/..").lexically_normal()"\\\\\\\\host\\\\share"を返すようになった
  • [v4:] equivalentは、どちらかのパスが存在しない場合にエラーを示すようになった
  • [v4:] GitHub #301 absoluteは、入力パスのrelative_path()が空の場合、末尾にディレクトリセパレータを持つパスを返すようになった
  • デフォルトのパスモデルを使用して一意のパスを生成するunique_path関数の、単一のerror_code& ec引数をとるオーバーロードを追加
  • GitHub #300 weakly_canonicalは、入力パスが相対パスであり、ファイルシステムに存在する要素を含まない場合、絶対パスを生成するようになった
  • GitHub #179 copy_filecopy操作に、新しいcopy_options::ignore_attribute_errorsオプションを追加。この新しいオプションにより、ファイル属性のコピー中に発生する可能性のあるエラーを無視できる
  • Linuxでは、sendfilecopy_file_rangeシステムコールに基づくcopy_fileバックエンドが、ターゲットファイルのストレージを事前に割り当てようとする。これにより、ファイルシステムの断片化が減少し、十分な空き容量がない場合に早期にエラーが示される。すべてのファイルシステムがこの機能をサポートしているわけではない。ストレージの事前割り当てがサポートされていない場合、ファイルのコピーは続行される
  • fdopendiropenat、POSIX.1-2008で定義されている関連APIをサポートするPOSIXシステム、およびWindowsでは、recursive_directory_iteratorは、反復中にファイルのステータスを問い合わせ、ネストされたディレクトリを開くために、パスの代わりにファイル記述子/ハンドルを使用するようになった。これにより、ファイルシステムの同時変更に対するディレクトリ反復の回復力が向上する
  • 以前に非推奨として宣言されていたAPIを削除しました。とくに、pathrecursive_directory_iteratorのメンバ関数、is_regularcopy_directorysymbolic_link_existscompletecopy_optionsymlink_option、およびboost/filesystem/convenience.hppboost/filesystem/path_traits.hppヘッダが削除された。削除されたコンポーネントの代替はドキュメントに記載されている
  • コンテナ型(例としてstd::vector<char>)からのpathの構築、代入、追加のサポートは、デフォルトで無効になった。ユーザーはBOOST_FILESYSTEM_DEPRECATEDを定義することで、この機能を有効にすることができる。この機能は非推奨のままであり、将来のリリースで完全に削除される予定

Function

  • C++03のサポートを終了。C++11コンパイラを要求するようになった
    • GCCは4.7以降、MSVCは12.0 (VS 2013) 以降

Geometry

  • 改善点
    • GitHub #1247 condition マクロの代わりに if constexpr マクロを使用
    • GitHub #1242 sideで並べ替えるためのstrategyを渡すようにした
    • GitHub #1234 clang/mac/darwin/arm64 用の CMake ファイルを追加
  • 解決した課題
    • GitHub #1231GitHub #1244 反時計回りのポリゴンに対する不正な集合操作を修正
    • GitHub #1259 CUDA NVCC コンパイラでのコンパイルエラーを修正
    • GitHub #1250 linestringのバッファが不正なinner polygonを返す問題を修正
    • GitHub #1230 union操作がpointに悪影響 (perturbing) し、間違った結果を返す問題を修正
    • GitHub #1229 union操作が自己交差を生成する問題を修正
    • GitHub #1248 閉じたクラスタ内の交点を非横断可能に設定することでバッファの問題を修正
    • GitHub #1246 コンバーターおよび is_base_of のコンパイルを修正
    • さまざまなエラーと警告の修正

Iterator

  • C++03のサポートを非推奨化。将来のリリースから削除される予定

JSON

  • エンディアンを扱うためにBoost.Endianを使用するようになった
  • Boost.SystemとBoost.Containerコンポーネントへのエイリアスは非推奨となり、1.87.0で完全に削除される予定
  • 記述されたクラスへの変換がプライベートメンバをサポートするようになった
  • visitに右辺値参照のオーバーロードを追加
  • pathのような型 (path-like types) への変換サポートを追加
  • 記述されたクラスへのparseが継承したメンバを正しく考慮するようになった
  • 自己参照するシーケンスの変換を無効化
  • visitの参照ハンドリングを修正

LEAF

  • スレッド間でエラーオブジェクトと例外を転送するための新たなAPI: try_capture_all
  • try_capture_allを介してキャプチャされた例外をresult<T>が転送できるようになった
  • 動的にキャプチャされたエラーオブジェクトをresult<T>が改善された効率で転送できるようになった
  • 古いmake_shared_context/capture APIは非推奨となり、次のリリースで削除される予定
  • 例外で動的にキャプチャされたエラーオブジェクトを転送するサポートを削除

LexicalCast

  • 最適化されたストリームとC++標準ライブラリIOベースのストリームを分離するための内部ロジックの大幅な書き換え:
    • C++標準ライブラリベースのストリームは、より良いパフォーマンスを実現するために、より少ないケースで構築されるようになった
    • テンプレートのインスタンス化を減らし、コードがシンプルになった
    • 常にstd::char_traitsを使用するようにした (入力/出力型からカスタムトレイトを使用しないようにした。リンク時または実行時エラーの原因になるため)
    • GitHub #64 前方宣言されたboost::arrayの誤用を修正 (報告をしてくれた13steinj氏に感謝!)
    • C++標準ライブラリの傾向に従い、volatile入力型のサポートを削除
  • GitHub #30 std::basic_string_viewboost::basic_string_viewからの変換を最適化
  • Boost.NumericConversionとBoost.MPLへの依存関係を削除。浮動小数点型から算術型への一部の変換を修正
  • GitHub #45 このライブラリが、-fno-sanitize-recover=integerオプションをつけてもコンパイルおよび動作するようになった

Locale

  • C++20モードでchar8_tの型情報が欠落していたことによるリンカーの問題を修正
  • バンドルされたIConvを使用する際のIConvコンパイルフラグを修正
  • ドキュメント化されているように、collatorはコンストラクタで例外を投げるようになった
  • GitHub #216 現在のバックエンドで利用できない場合の型の混同を避けるため、collatorstd::collatorを継承しなくなった
  • GitHub #218 無限ループを回避するため、不正なIConvライブラリ (一部のMacOSバージョンなど) が検出された場合に例外を投げるようになった
  • GitHub #221 date_timeの分解能がミリ秒単位だと混乱が起きていたため、秒に変更

Math

  • 新しい最適化アルゴリズムのコレクションが追加されました:
  • NCF生存関数 (NCF survival function) における0による割り算の警告を修正
  • ccmath::floor/ceilの大きな引数に対するconstexpr深さの制限を修正
  • quartic_rootsの精度を改善
  • libstdc++14のcstdfloatのnumeric limits検出マクロを修正
  • GitHub #1060 C++14を使用する際にMSVC UCRTがcomplex.hで_Complex_Iを定義する問題を修正
  • GitHub #1066 cstdfloat iostreamを改善
  • スタンドアロンモードではない環境でスタンドアロンモードを使用する際のBoost.Configマクロの再定義を修正
  • コードカバレッジを大幅に改善し、関連するバグを修正

MSM

  • メジャーアップデート バックエンドを更新 (back11)。C++11が必要となる。ドキュメントではこれがデフォルトとなった
  • 大きな新機能 新しいフロントエンド (PlantUML) を追加。C++20が必要となる
  • 様々なバグ修正 (コンパイルエラーと警告、遅延イベントの優先度)

Multi-index

  • ドキュメントの間違いを修正

Multiprecision

  • GitHub #575 C++23 <limits>から発生する非推奨警告を修正
  • GitHub #577 小さなビット数に対するcpp_bin_floatを修正
  • GitHub #580 -Wpessimizing-moveを修正
  • covecovの実行を追加
  • GitHub #585 cpp_dec_float乗算での切り捨てを減らすよう修正
  • GitHub #597 精度要件を満たすようcomplex_adaptorを修正
  • GitHub #603 tommathの破壊的変更に対する修正
  • GitHub #608 数値に変換可能な型が算術演算子オーバーロードに参加できるように修正

MySQL

  • 破壊的変更: Boost.MySQLでは、新たにコンパイルされたBoost.Charconvライブラリへのリンクが必要になった
    • これは、ロケール依存の問題を解決し、効率を向上させ、新しいクライアント側SQLフォーマット機能を提供する
  • 接続プールの実験的サポートを追加。これにより、セッションを再利用でき、組み込みの再接続とエラー処理が提供される
  • 型消去された接続 (any_connectionクラス) の実験的サポートを追加
    • any_connectionはテンプレートではなく、より簡単な接続の確立と再接続のセマンティクスを特徴としている
  • クライアント側SQLフォーマット関数 (format_sqlformat_sql_to) の実験的サポートを追加
    • これにより、クライアント側で安全にクエリを構成できるため、バッチインサートや動的フィルタ、PATCH-like updateなどのパターンが可能になる
  • close_statementasync_close_statementでの、アプリケーションコードに大幅な遅延を引き起こす可能性のあるパフォーマンスの問題を修正
  • BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULTを使用したビルドのサポートを追加
  • 非推奨の実行インターフェース (connection::queryconnection::start_queryconnection::execute_statementconnection::start_statement_executionとそれらの非同期対応版) は、Boost 1.86で削除が予定されているため、警告が発生するようになった
  • 一部のエラーメッセージが切り捨てられるバグを修正
  • 警告を整理。-Wall-Wextraを使用したビルドで警告は発生しなくなった
  • field_viewのすべてのコンストラクタを安定化
  • ライブラリ内部をsans-ioアプローチで書き換え、複雑さが減った

Odeint

  • 破壊的変更: このライブラリは、Boost.Mathをインクルードすることによる暗黙の要件ではなく、明示的にC++14を要求するようになった
  • Thrust 1.10.0との互換性を修正
  • 以下のC++03 Boostコンポーネントを削除:
    • Array
    • Bind
    • Function
    • Static_assert

PFR

  • GitHub #152 boost::pfr::get_nameは、一部のコンパイラでローカル型で動作するようになった
  • GitHub #154 未使用の実装の詳細を削除しました。PRをしてくれたDenis Mikhailov氏に感謝!
  • GitHub #155 boost::pfr::structure_to_tupleから例外を送出できるようになった。バグ報告をしてくれたDenis Mikhailov氏に感謝!
  • フィールド・リフレクションのトリックがドキュメントに記述された。GitHub #150の議論に参加してくれた全ての人に感謝!

Random

  • GitHub #89 splitmix64擬似乱数生成器を追加

System

  • C++03はサポートされなくなった。C++11コンパイラが必要となる
    • これにはGCC 4.8以降、およびMSVC 14.0 (VS 2015) 以降が含まれる
  • 非推奨のヘッダー boost/system/cygwin_error.hpp を削除
  • 旧式のMinGW (32ビット) はサポートされなくなった。MinGW-w64 (64ビットと32ビット) はサポート対象
  • result<void>operator&が使用可能になった (nullary関数を介して)
  • resultoperator|=を追加

Stacktrace

  • 大きな新機能: 任意の例外からのスタックトレース
    • 一部のPOSIXプラットフォームで、std::stacktrace::from_current_exception()が現在の例外オブジェクトのスタックトレースを返すようになった。これは、例外が送出された時点でスタックトレースがキャプチャされたかのように動作する。この機能のプロトタイプをlibsfeで作成してくれたAndrei Nekrashevich氏に感謝します。
  • GitHub #111 boost_stacktrace_windbgでのWindows上のメモリ消費を修正した。問題を報告してくれたycyclop氏、詳細を提供してくれたThiago A. Correa氏、可能な修正を提供してくれたAndrei Karpovskii氏に感謝
  • non hidden visibilityでのライブラリビルドを修正。報告と修正方法の情報を提供してくれたJan Bouwer氏に感謝
  • GitHub #131 ドキュメントに非同期シグナル安全に関する独立したセクションを追加。問題を指摘してくれたtworonix氏と、問題に関する情報を提供してくれたitrofimow氏に感謝

STLInterfaces

  • C++20以降、iterator_interfaceの入力イテレータの動作を変更し、C++20のコンセプトにより密接に従うようにした
  • コンセプトが異なる制約で再定義されているというエラーを修正するため、iterator_interfaceからHidden Friendsを削除
  • CRTPの代わりに deducing this に基づいた新しい iterator_interface を含む新しい v3 インライン名前空間を追加(C++23以降)
  • 一時オブジェクトのダングリングを防ぐために、closure::operator()の右辺値修飾オーバーロードを追加

Test

  • GitHub #406 ライブラリ固有の _NO_LIB マクロを考慮するようにした
  • 意図的に到達不能なコードの __builtin\_unreachable() で MSVC C4702 を抑制するようにした
  • GitHub #411 boost::function のストリーミングエラーを修正

Unordered

  • value_type または init_type(該当する場合)の引数に対して emplace() を最適化し、中間オブジェクトの作成を回避するようにした。引数はすでに中間オブジェクトと同じ型になっている
  • マップコンテナの k,v 引数に対して emplace() を最適化し、要素を挿入すべきであることが確実になるまでオブジェクトの構築を遅延させるようにした。この最適化は、マップの key_type がムーブ構築可能であるか、k 引数が key_type である場合に行われる
  • GitHub #234 explicitなコピーコンストラクタを持つアロケータのサポートを修正
  • GitHub #238 unordered_multimap::find(k, hash, eq)const バージョンのバグを修正

Variant

  • C++11より前のマクロとワークアラウンドをさらに削除

Wave

  • バグ修正
    • GitHub #200: 出力されたpragmaが改行で終了していない問題を修正
    • GitHub #202: BOOST_WAVE_BSIZE境界でfillが呼び出されたときにYYMARKERが更新されない問題を修正

Build

テスト済みコンパイラ

主要なテストコンパイラ:

  • 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