本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_85_0.qbk
- http://www.boost.org/users/history/version_1_85_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
既知の問題
- Container
flat_map
/flat_set
コンテナが、未定義動作が原因でいくつかのコンパイラでクラッシュしたり、無効な結果を返すことがある。GitHub #273およびパッチを参照
新ライブラリ
- CharConv
- C++11での
<charconv>
の高品質な実装 (作者Matt Borland氏)
- C++11での
- Scope
- Scope Guardユーティリティと
unique_resource
ラッパーのコレクション (作者Andrey Semashev氏)
- Scope Guardユーティリティと
更新ライブラリ
- Asio
- Atomic
- Beast
- Bimap
- Bind
- Conversion
- Core
- Filesystem
- Function
- Geometry
- Iterator
- JSON
- LEAF
- LexicalCast
- Locale
- Math
- MSM
- Multi-index
- Multiprecision
- MySQL
- Odeint
- PFR
- Random
- System
- Stacktrace
- STLInterfaces
- Test
- Unordered
- Variant
- Wave
更新ツール
Asio
- 左辺値修飾された完了シグネチャを正しく処理するために、
async_result
プライマリテンプレートのコンセプトチェックを修正 - 完了トークンアダプタ
bind_allocator
、bind_executor
、bind_immediate_executor
、bind_cancellation_slot
を使用して互いをアダプトさせる際に発生する可能性があるいくつかのコンパイルエラーを修正 experimental::ranged_parallel_group
操作を変更し、完了ハンドラを呼び出す際にcompletion_order
vectorをムーブするようにしたip::basic_resolver_query
、io_context::strand
、coroutine
で非推奨の暗黙のコピーコンストラクタに関する警告を修正- 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::associator
のbind_wrapper
とbind_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_of
やunordered_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_deleter
、fclose_deleter
、チェックされたデリーター定義を変更し、引数依存の名前探索 (ADL) で名前空間boost
が持ち込まれないようにした。ユーザーは、呼び出される関数の名前空間を明示的に修飾するか、using
宣言を追加する必要があるかもしれない
Filesystem
path::generic_path
とpath::generic_string
メソッドは、返されるパスの中の重複したディレクトリセパレータを削除するようになった- [v4:]
path::generic_path
、path::generic_string
、path::make_preferred
、path::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_file
とcopy
操作に、新しいcopy_options::ignore_attribute_errors
オプションを追加。この新しいオプションにより、ファイル属性のコピー中に発生する可能性のあるエラーを無視できる - Linuxでは、
sendfile
とcopy_file_range
システムコールに基づくcopy_file
バックエンドが、ターゲットファイルのストレージを事前に割り当てようとする。これにより、ファイルシステムの断片化が減少し、十分な空き容量がない場合に早期にエラーが示される。すべてのファイルシステムがこの機能をサポートしているわけではない。ストレージの事前割り当てがサポートされていない場合、ファイルのコピーは続行される fdopendir
、openat
、POSIX.1-2008で定義されている関連APIをサポートするPOSIXシステム、およびWindowsでは、recursive_directory_iterator
は、反復中にファイルのステータスを問い合わせ、ネストされたディレクトリを開くために、パスの代わりにファイル記述子/ハンドルを使用するようになった。これにより、ファイルシステムの同時変更に対するディレクトリ反復の回復力が向上する- 以前に非推奨として宣言されていたAPIを削除しました。とくに、
path
とrecursive_directory_iterator
のメンバ関数、is_regular
、copy_directory
、symbolic_link_exists
、complete
、copy_option
、symlink_option
、およびboost/filesystem/convenience.hpp
とboost/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 #1247
- 解決した課題
- GitHub #1231、GitHub #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_view
とboost::basic_string_view
からの変換を最適化 - Boost.NumericConversionとBoost.MPLへの依存関係を削除。浮動小数点型から算術型への一部の変換を修正
- GitHub #45 このライブラリが、
-fno-sanitize-recover=integer
オプションをつけてもコンパイルおよび動作するようになった
Locale
- C++20モードで
char8_t
の型情報が欠落していたことによるリンカーの問題を修正 - バンドルされたIConvを使用する際のIConvコンパイルフラグを修正
- ドキュメント化されているように、
collator
はコンストラクタで例外を投げるようになった - GitHub #216 現在のバックエンドで利用できない場合の型の混同を避けるため、
collator
はstd::collator
を継承しなくなった - GitHub #218 無限ループを回避するため、不正なIConvライブラリ (一部のMacOSバージョンなど) が検出された場合に例外を投げるようになった
- GitHub #221
date_time
の分解能がミリ秒単位だと混乱が起きていたため、秒に変更
Math
- 新しい最適化アルゴリズムのコレクションが追加されました:
- GitHub #1062 差分進化 (Differential Evolution)
- GitHub #1065 JSO
- GitHub #1071 ランダム探索
- GitHub #1074 CMA-ES
- 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_sql
とformat_sql_to
) の実験的サポートを追加- これにより、クライアント側で安全にクエリを構成できるため、バッチインサートや動的フィルタ、PATCH-like updateなどのパターンが可能になる
close_statement
とasync_close_statement
での、アプリケーションコードに大幅な遅延を引き起こす可能性のあるパフォーマンスの問題を修正BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
を使用したビルドのサポートを追加- 非推奨の実行インターフェース (
connection::query
、connection::start_query
、connection::execute_statement
、connection::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
は、一部のコンパイラでローカル型で動作するようになった- PRをしてくれたBela Schaum氏に感謝!
- 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
関数を介して)result
にoperator|=
を追加
Stacktrace
- 大きな新機能: 任意の例外からのスタックトレース
- 一部のPOSIXプラットフォームで、
std::stacktrace::from_current_exception()
が現在の例外オブジェクトのスタックトレースを返すようになった。これは、例外が送出された時点でスタックトレースがキャプチャされたかのように動作する。この機能のプロトタイプをlibsfe
で作成してくれたAndrei Nekrashevich氏に感謝します。
- 一部のPOSIXプラットフォームで、
- 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
- B2のバージョン5.1.0
テスト済みコンパイラ
主要なテストコンパイラ:
- 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