本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_79_0.qbk
- http://www.boost.org/users/history/version_1_79_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
なし
更新ライブラリ
- Asio
- Assert
- Atomic
- Beast
- Core
- Describe
- Filesystem
- Geometry
- Integer
- IO
- Iterator
- JSON
- LEAF
- Log
- Multi-index
- Nowide
- Optional
- Predef
- QVM
- Smart Pointers
- System
- ThrowException
- Unordered
- Variant2
- Wave
更新ツール
Assert
source_location().file_name()
とsource_location().function_name()
が、"(unknown)"
の代わりに""
を返すようになったsource_location
に、std::source_location
からの変換コンストラクタを追加BOOST_CURRENT_LOCATION
を変更し、トップレベルで使用したり、関数のデフォルト引数として使用したりした場合に、std::source_location::current()
とより厳密に動作を一致させた
Asio
bind_allocator
を追加file_base::sync_all_on_write
フラグを追加basic_file::release()
の不足していた実装を追加- signal setの各操作にキャンセルのサポートを追加
recycling_allocator
をpublicインタフェースの一部として公開- いくつかの関数に
nodiscard
属性を追加 - OpenSSL 3.0との互換性を追加
- 既存の
SSL*
をssl::stream<>
にアダプトするサポートを追加 - すべてのビルド構成で
executor_work_guard<>
を有効化 - Clangでmovable socket iostreamを有効化
bind_cancellation_slot
とbind_executor
の、古い完了トークンとの互換性を修正experimental::append
とexperimental::prepend
に対するassociator
の特殊化を修正associated_allocator
のプライマリテンプレートを修正- socketの
async_receive_from
とファイルのwrite_some_at
のio_uring実装を修正 - io_uring機能の検出を修正
experimental::coro
の各操作のキャンセルを修正experimental::promise
の型消去された完了ハンドラのメモリ管理を修正ssl::stream
のムーブ代入演算子の実装を修正BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
とBOOST_ASIO_SEPARATE_COMPILATION
の両方が定義された際のany_io_executor
の実装を正しく動作するよう修正sockatmark()
システムコールを使用する際のbasic_socket::at_mark()
の実装を修正- recycling allocatorのメモリ確保のデフォルトアライメントを、最小アライメントを使用するよう変更
- Apple clangでのコルーチンコード生成で判明したバグのワークアラウンドを追加
- Windowsにおいて、
fopen()
で同じ共有モードを使用してファイルを開くようファイルサポートを変更 - Linuxにおいて、UNIX domain socketの実装を修正し、
EAGAIN
が正しく処理されるようにした experimental::basic_channel::reset()
とexperimental::basic_concurrent_channel::reset()
の実装を修正experimental::promise
内の潜在的な未定義動作を修正- いくつかの状況において、executorを介してキャンセルのシグナルをdispatchするよう
co_spawn
の実装を修正 - さまざまなヘッダのインクルード問題を修正
- さまざまな警告を修正
- いくつかのドキュメント強化:
- Asio非同期モデルの概要 (overview of Asio's asynchronous model) を追加
- 非同期モデルに関するリファレンスと要件のドキュメントを作り直した
dispatch()
,post()
,defer()
のドキュメントを更新- シリアルポートの各操作のキャンセルをドキュメント化
- アロケータの「非同期実行性の保証 (non-concurrency guarantees)」を明記
io_context
のリファレンスドキュメントを、executor_work_guard
を使用するよう修正make_strand()
,make_work_guard()
,ip::address_v4
,ip::address_v6
,experimental::basic_channel
,experimental::basic_concurrent_channel
のドキュメントをより詳細にした- 最近追加された機能をカバーするために、概要ドキュメントを再配置・拡張した
- local socketを通過するfile descriptorのC++11サンプルコードを追加
- 非同期操作のコールバックベースAPIをラップするC++14サンプルコードを追加
- 詳細はRevision Historyを参照
Atomic
- GitHub #54 Universal Windows Platform (UWP) でのコンパイルを修正
- GitHub #55 設定マクロ
BOOST_ATOMIC_NO_DARWIN_ULOCK
を追加。このマクロはDarwinシステムでのコンパイルに影響を与え、wait/notify操作のulock
ベースの実装を無効にする。これはApple App Storeの要件に準拠するために役立つ場合がある
Beast
file_body
のテストに不足していたインクルードを追加- 失敗していたWebSocketハンドシェイクのレスポンスを修正
file_posix
とfile_win32
の追記オープンモードを修正- Windowsでの
append
/append_existing
フラグ付きでファイルを開く操作を修正 file_win32
とfile_stdio
のclang-cl UTF-8ハンドリングを修正- drone CIでのARM64ビルドを追加
async_base
ドキュメントのリンクを修正append
/append_existing
モードでファイルを開くテストを追加- gcc 11, clang 12, msvc 14.3を含めるようCIを更新
- CMakeワークフローでの個別テストを追加
- 完全な変更はRelease Notesを参照
Core
- LWG3545に対応し、
boost::pointer_traits
をSFINAEフレンドリーにした (Glen Fernandes氏に感謝) - 個別のアロケータ特性にアクセスする
boost::allocator_traits
を追加。この実装はC++03以降をサポートする (Glen Fernandes氏に感謝) - C++03でほとんどのC++11アロケータモデルをサポートするよう、アロケータのアクセス特性を更新 (Glen Fernandes氏に感謝)
boost/iterator.hpp
は非推奨となり、将来のリリースで削除される予定。このヘッダはboost::iterator
を定義し、それは<iterator>
のstd::iterator
と等価である。しかしこの機能はC++17で非推奨となっているため、ユーザーにはこれらの使用をやめることを勧めるboost::core::verbose_terminate_handler
を追加。これは、捕捉されなかった例外をstderr
に出力する、std::set_terminate
関数に渡すことを目的としたユーティリティ関数である
Describe
BOOST_DESCRIBE_STRUCT
でのunion
を有効にし、std::is_union<T>
をチェックするようサンプルコードを更新fmtlib
のクラスフォーマッタを定義するサンプルコードを追加fmtlib
のenumフォーマッタを定義するサンプルコードを追加- メンバへのポインタを出力するサンプルコードを追加
Filesystem
- v3の
path::replace_extension
は、v4ではなくv3のpath::extension
の定義に関して機能するようになった - GitHub #223
path
または変換可能な文字列型を引数にするパスの追加と連結の演算子のコンパイルを修正 - GitHub #224
fdopendir
とO_NOFOLLOW
をサポートするPOSIXシステムとWindowsでは、remove_all
がCVE-2022-21658から保護されるようになった。この脆弱性は、サードパーティのプロセスがremove_all
によって同時に処理されるディレクトリをディレクトリシンボリックリンクに置き換え、remove_all
がシンボリックリンクをたどり、シンボリックリンクを削除する代わりにリンクされたディレクトリ内のファイルを削除することを可能にする競合状態である - GitHub #216 Windowsの
remove
とremove_all
の実装で、OSでサポートされている場合に (Windows 10 1709以降)、ファイルの削除にPOSIXセマンティクスを使用する。POSIXセマンティクスがサポートされている場合、ファイルがまだ開かれていて使用中であっても、ファイルに削除マークがつけられてすぐに、ファイル名はファイルシステム名前空間から削除される。従来のWindowsセマンティクスでは、ファイルへの最後のファイルハンドルが閉じられるまで、ファイル名はファイルシステム名前空間に存在し続ける。これにより、削除のマークが付けられたファイルを開くことができ、同じ名前の新しいファイルが作成されなくなる - Windowsにおいて、
remove
とremove_all
で読み取り専用ディレクトリの削除をサポートした。読み取り専用の非ディレクトリファイルの削除サポートは、以前から追加されていた - Windowsにおいて、
directory_iterator
の内部実装を作り直し、最新のWindows APIを有効に活用できるようになった。これにより、シンボリックリンク処理中のパフォーマンスが向上する可能性がある - Windowsにおいて、可能であれば内部のWinAPIの関数ポインタを早期に初期化し、Boost.Filesystemの操作をグローバルコンストラクタで呼び出せるようにした。これは、MSVC、GCC、Clang、およびそれらと互換性のあるコンパイラでのみサポートされる
- Windowsにおいて、開かれているファイルに対して
resize_file
した際に、エラーにならないようにした - GitHub #229 Androidの11.0 (APIバージョン30) より前での、
statx
システムコールの使用を無効にした。そのシステムコールはseccompによってブラックリストに登録されており、実行時にプロセスが終了してしまう - 非推奨化 :
boost/filesystem/string_file.hpp
は非推奨となり、将来のリリースから削除される。このヘッダはデフォルトではboost/filesystem.hpp
に含まれなくなった。ユーザーは、この機能を自身で実装するか、他の実装に移行することを勧める - 非推奨化 : Windows CEのサポートは非推奨となり、将来のリリースから削除される。Windows CEは長年テストされておらず、機能していない可能性がある
Geometry
- 大きな変更
- GitHub #977 再スケーリングをデフォルトでオフにした。これにより、集合操作とバッファに関連する多くのバグが回避される
- 改善
- GitHub #923 cartesian point/geometry向けに
closest_points
アルゴリズムを追加 - GitHub #939
closest_points
アルゴリズムに他の座標系や剛体の組み合わせ (boxなど) を追加 - GitHub #961 Webメルトカル図法 (Web Mercator projection) を追加
- GitHub #966
simplify
で使用されるcartesian distanceをより効率的にした
- GitHub #923 cartesian point/geometry向けに
- 解決したissue
- GitHub #956 誤ったclosureをともなう
simplify
アルゴリズムの結果を修正 - GitHub #962 load factorによるR-treeのデシリアライズ時の実行時エラーを修正
- GitHub #971 ARMプラットフォームで
long double
を使用した際に影響を受けるR-treeの挿入時間を修正
- GitHub #956 誤ったclosureをともなう
- バグ修正
- GitHub #936 極 (pole) を含むpolygonのenvelopeを修正
- GitHub #948 meridian segments付近のspherical/geometric envelopeを修正
- GitHub #974 NaN座標の回転楕円体正規化ユーティリティ (spheroidal normalization utilities) を修正
- 集合操作とバッファのさまざまなバグを修正
Integer
- GitHub #31 内部でビット演算を使用するよう
integer_log2
の実装を最適化した。これにより、最新のCPUで利用可能なビット命令を使用できる
IO
- ヌルストリームバッファである
boost::io::basic_nullbuf
と、ヌル出力ストリームであるboost::basic_onullstream
を追加 (Glen Fernandes氏に感謝)
Iterator
counting_iterator
に、GCCとClangおよびそれらと互換性のある一部のターゲットプラットフォームでサポートされる組み込みの128ビット整数型のサポートを追加counting_iterator
での、非推奨の暗黙のコピー代入演算子に関するGCCの警告を黙らせた
JSON
- このライブラリのスタンドアロンモードを削除。スタンドアロンのJSONライブラリを使用したい場合は、the C++ Alliance forkを使用すること
std::error_code
のオーバーロードを追加error_codes
にboost::source_location
を追加- JSON Pointerのサポートを追加
- シリアライズ中に文字列を自然に伸長させるようにした
LEAF
- FreeRTOSとその他の組み込みプラットフォームをサポート
- 診断情報を改善
- 設定マクロを改善
__GNUC__
環境下では、BOOST_LEAF_CHECK
はstatement expressionを使用するようにした- シンボルのデマングルバグを修正
Log
- 全体的な変更
text_file_backend
において、ファイルローテーションが使用され、ログファイル名がファイルカウンタを使用する場合に、以前に書き込まれたログファイルに追記するためのサポートを追加- 破壊的変更
file_collector
のインタフェースを以下のように変更:scan_for_files
メンバ関数は、スキャン中に収集された情報を含むscan_result
構造体を返す- パスがターゲットストレージディレクトリ内のファイルを参照しているかどうかをテストするために、
is_in_storage
メンバ関数を追加
- ユーザーの関数をストリーム出力式に挿入するために使用できる新たな
invoke_manip
ストリームマニピュレータを追加
- バグ修正
- GitHub #179 ユーザーが
text_file_backend::scan_for_files
を複数回呼び出し、2回目以降の呼び出しで新しいファイルが見つからない場合に、ファイルカウンタがゼロに設定される問題を修正
- GitHub #179 ユーザーが
- 詳細はchangelogを参照
Multi-index
- ranked indicesの
count
操作の効率を、O(log(n) + count)
からO(log(n))
に改善 (Damian Sawicki氏による貢献) - メンテナンス作業
Nowide
- いくつかのプラットフォームでのコンパイル問題を修正 (例として、MinGW-w64やCygwinのGCC 11)
BOOST_USE_WINDOWS_H
とWIN32_LEAN_AND_MEAN
を使用した際の不足していたインクルードを修正boost::nowide::stat_t
をともなうboost::nowide::stat
を使用した際のサニティチェックを追加
Optional
- GitHub #98
std::optional<bool>
との相互運用がうまくいっていなかったところを修正 - GitHub #92
BOOST_NO_IOSTREAM
のサポートを追加 - 未定義動作を避けるためにaligned storageに
char
の代わりにunsigned char
を使用するよう修正 - 未定義動作を避けるために、placement newでCV修飾された
value_type
を使用するよう修正
Predef
- Version 1.14.0
- LoongArchの検出を追加 (Zhang Na氏に感謝)
QVM
- C++17の
constexpr
を追加 - シングルヘッダの配布を改善
Smart Pointers
boost::allocate_unique
の結果からアロケータへのポインタを取得するために、boost::get_allocator_pointer
を追加 (Glen Fernandes氏に感謝)
System
throw_exception_from_error
にboost::source_location
パラメータを追加throw_exception_from_error
に、errc::errc_t
,std::error_code
,std::errc
,std::exception_ptr
のオーバーロードを追加result <T> :: value
は、デフォルトの引数を介してBOOST_CURRENT_LOCATION
をthrow_exception_from_error
に自動的に供給するようになったerrc::make_error_code
に、source locationを引数にとるオーバーロードを追加
ThrowException
- Boost.Exceptionを使用しないプログラムのために、
BOOST_THROW_EXCEPTION
の軽量な代替手段であるboost::throw_with_location
を追加
Unordered
- すべてのコンテナが、異種混合 (heterogeneous) の
count
、equal_range
、find
を持つよう更新した - すべてのコンテナに
contains
メンバ関数を実装 - すべてのコンテナで使用できる
erase_if
を実装 - すべてのコンテナが、異種混合の
erase
とextract
を持つよう更新した reserve
が早期にアロケートするよう振る舞いを修正- テストスイートのさまざまな警告を修正
- 内部で
boost::allocator_traits
を使用するよう更新 - Fibonacci hashingに切り替え
- ドキュメントをQuickBookからAsciiDocに置き換え
Variant2
monostate
用のoperator<<
を追加
Wave
- WaveのビルドにC++11を要求するようになった
- バグ修正
- GitHub #135 C++20で非推奨になった配列の添字演算子中のカンマ演算子の使用を修正
- GitHub #137 C++11以降のモードでEOF前の改行を要求しないよう修正
- GitHub #138 空のifdefブロックが空白を入れない限り行ディレクティブを発行しない問題を修正
- GitHub #143
__has_include()
のあとにトークン (空白含む) があるとパースに失敗する問題を修正 - GitHub #145
reset_version()
内でのsanitizerのエラーを修正 - GitHub #147 異なる列挙型同士のビット演算がC++20で非推奨になったことによる警告を修正
Build
- B2 version 4.8.2をリリース
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 12.0.0
- Clang, C++11: 3.4, 11.0.0
- Clang, C++14: 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 5.0, 12.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
- Clang, C++20: 11.0.0, 12.0.0, 13.0.0
- GCC: 4.6.3, 11
- GCC, C++11: 4.7.3, 4.8.5, 11
- GCC, C++14: 5.4.0, 6.4.0, 7.3.0, 8.0.1, 9.1.0, 11
- GCC, C++17: 7.3.0, 8.0.1, 9.1.0, 11
- GCC, C++20: 8.0.1, 9.1.0, 10, 11
- OS X:
- Apple Clang: 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