本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_78_0.qbk
- http://www.boost.org/users/history/version_1_78_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
なし
更新ライブラリ
- Asio
- Assert
- Atomic
- Beast
- Core
- Describe
- DLL
- Filesystem
- Geometry
- JSON
- Lambda2
- Log
- Math
- Multi-index
- Multiprecision
- PFR
- Predef
- Regex
- System
- Utility
- Variant2
更新ツール
Asio
- ソケット、タイマー、posix descriptorを含むすべてのI/Oオブジェクトに、オプションとして使用できるio_uringバックエンドを追加
- ストリーム指向ファイルとランダムアクセスファイルの新たなクラスによってファイルのサポートを追加。この機能は現在のところ、WindowsではI/O完了ポート、Linuxではio_uringをサポートしている
- POSIXとWindowsでの汎用パイプのサポートを追加 (I/O完了ポートが使用可能な場合に使用できる)
- io_uringバックエンド使用時に最適化されるregistered bufferのサポートを追加
-
完了をメッセージとして送信もしくはキューに入れるために使用できるchannelを実験的にサポート
// バッファスペースのないチャネルを作成 channel<void(error_code, size_t)> ch{ctx}; // バッファスペースがなく、待機中の受信操作がないため`try_send`は失敗する bool ok = ch.try_send(asio::error::eof, 123); assert(!ok); // async_sendは、受信操作がメッセージを消費するまでブロックする ch.async_send(asio::error::eof, 123, [](error_code ec) { // … }); // async_receiveはメッセージを消費する。 // async_send操作とasync_receive操作の両方が即座に完了する ch.async_receive([](error_code ec, size_t n) { // … });
-
experimental::coro
の改善を実装 - MSVCランタイムを使用した際のClangでの
aligned_alloc
を無効化 ip::network_v4::canonical()
に、より高速な実装を使用するよう変更- コンパイル時間を改善するために、一般用途のテンプレート特殊化を追加
io_context
executorのサイズをポインタひとつになるよう縮小execution::any_executor
とany_io_executor
のsmall object bufferのサイズを増やした- 可変引数テンプレートが無効なときの、複数シグニチャでのハンドリング (multi-signature handling) を修正
- GCCとClangの新バージョンの互換性を修正
- Solarisでのコンパイルを修正
- MSVCでビルドする際の、Qt定義のマクロに対する防御を修正
ssl
機能によって発行されるエラーメッセージを改善bind_executor
の完了トークンとの互換性を修正BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
を定義した際のビルドエラーを修正awaitable<>
に不足していたムーブ代入演算子を追加- 確保されたメモリの不適切なアライメントによる、MSVCでコルーチンを使用した際のアクセス違反を修正
- 並列操作がまだ保留されている状態でexecution contextがシャットダウンされた際に起きた
experimental::parallel_group
のクリーンアップの問題を修正 - 並行性ヒント (concurrency hints) のドキュメントに説明を追加
- C++20コルーチンのエラーハンドリング手法についてのドキュメントを追加
- さまざまな警告を修正
- 詳細はRevision Historyを参照
Assert
source_location::to_string
を追加
Atomic
- Androidでの非IPCのwait/notify操作には、プロセスローカルのfutex操作を使用するようにした
- riscv32などのような
SYS_futex_time64
システムコールのみを定義するLinuxターゲットのサポートを追加 - 32ビットx86ターゲットでのClang 8での64ビット型に対する
std::alignment_of
が誤った結果になる問題についてワークアラウンドを追加 - Mac OS 10.12, iOS 10.0, tvOS 10.0, およびwatchOS 3.0以降のDarwinシステムでのwait/notify操作のために、ulockバックエンドを追加
- Windows 8以降をターゲットとした場合に、atomic-type
::always_has_native_wait_notify
と対応する機能テストマクロの間の不一致を修正。このライブラリはパブリックヘッダから直接WaitOnAddress
と関連するAPIを使用するため、Windows 8以降もしくはBOOST_USE_WINAPI_VERSION
,_WIN32_WINNT
, 同様のマクロが定義されている場合、ユーザーはsynchronization.lib
をリンクする必要がある。このライブラリは自動リンクをサポートするコンパイラ (MSVCなど) では自動的にリンクする - padding bitをクリアする方法を提供するコンパイラにおいて、unionを除くpadding bitをもつ型のサポートを追加。この機能はGCC 11とMSVC 14.2 (コンパイラバージョン19.27) 以降、および同様の組み込み関数をサポートするほかのコンパイラでサポートされる。padding bitをクリアできないコンパイラでは、x86ターゲットの80ビットの
long double
を除いて、padding付きの型は一般にサポートされない。新たな機能マクロBOOST_ATOMIC_NO_CLEAR_PADDING
が定義された場合、パディングのクリアがサポートされないことを示す atomic_ref
およびipc_atomic_ref
の初期化コンストラクタは、参照オブジェクトのpadding bitをクリアするためにアトミック命令を使用するのをやめた。これによりatomic refの構築コストが削減されるatomic
およびipc_atomic
の初期化コンストラクタは、列挙型、クラス、浮動小数点数型に対してconstexpr
になった。クラスと浮動小数点数型の場合、コンパイラがconstexpr
のstd::bit_cast
をサポートし、型にpadding bitがなく、ネイティブのアトミック操作を実装するためにpaddingが必要ない場合に、constexpr
になる- C++20に従って、
atomic
およびipc_atomic
のデフォルトコンストラクタは、含まれているオブジェクトの値初期化を実行するようにした。ユーザー定義のデフォルトコンストラクタがない場合、デフォルト構築されたアトミックオブジェクトはゼロで初期化されることを意味する - GitHub #50 アセンブラツールがnumeric labelをサポートしていないために発生するAIXでのコンパイルエラーのワークアラウンドを追加
- GitHub #52 Visual Studio 2015 Update 3以前でのコンパイルエラーのワークアラウンドを追加
- より詳細はchangelogを参照
Beast
- 今回は小さなバグ修正とCI報告の更新を行うメンテナンスアップデートである
- zlibのセキュリティ脆弱性CVE-2016-9840を修正
- WebSocketの
permessage_deflate
の実装を修正。これにより、Beast WebSocketを使用する際の圧縮のパフォーマンスが向上するだろう - テストストリームとテストフレームワークのRTTIへの依存をなくした。これにより、自身の便利なテストストリームを使用し、埋め込まれた非同期通信コードを確認できる
- 完全な変更はRelease Notesを参照
Core
BOOST_CORE_USE_GENERIC_CMATH
が定義されるか、もしくはプラットフォームが<cmath>
に必要な機能を提供していない場合に有効になる汎用実装を<boost/core/cmath.hpp>
に追加- 型の名前を文字列として返すユーティリティ関数
boost::core::type_name
を追加 - C++20の
std::span
のC++11実装であるboost::span
を追加 (Glen Fernandes氏に感謝)
Describe
has_describe_enumerators
,has_describe_bases
,has_describe_members
を追加enum_to_string
,enum_from_string
を追加- 関係演算子とストリーム入力演算子を追加
descriptor_by_name
,descriptor_by_pointer
を追加
DLL
- GitHub #54 不足していた
#include
を修正 (Denis Blank氏に感謝) - GitHub Action CIを優先し、Travis CIを削除
Filesystem
- GitHub #193 v4 : パスがディレクトリが区切り文字でおわっている場合に、
path::filename
とpath::iterator
は暗黙の末尾ドット ("."
) を返さなくなった。その代わりに、C++17のstd::filesystem
ライブラリと同様に空のパスが返される。path::stem
,path::compare
,lexicographical_compare
などイテレータやファイル名で定義される関数にも影響する。例として、path("a/b/") == path("a/b/.")
はもはやtrue
にはならない - v4 :
path::lexically_normal
は末尾のドット ("."
) を生成しなくなり、正規化されたパスの末尾のドットx2 (".."
) 要素のあとのディレクトリ区切り文字を省略するようになった - GitHub #214 v4 :
path
のappend操作で、追加されたパスのルート名とルートディレクトリが考慮されるようになった。追加されたパスが絶対パスである場合、もしくはルート名が存在しソースパスと異なる場合、結果のパスは追加されたパスと等価 (equivalent) となる。ルートディレクトリが存在する場合、結果はソースパスのルート名に基づいてリベースされたルートディレクトリと相対パスとなる。それ以外の場合、動作はv3と同様となる path::lexically_normal
は、正規化されたパスのルート名内のディレクトリパスを推奨区切り文字 (preferred separator) に変換するようになったpath::assign
,path::append
,path::concat
とそれらに対応する演算子オーバーロードを最適化し、不要なパスのコピーを回避し、コードの冗長性を減らした- POSIXシステムにおいて、パス
p
がルートディレクトリではじまる場合、ルート名としてbase.root_name()
のパスを返すabsolute(p, base)
を修正した。このような場合、p
はすでに絶対パスであるため、そのまま返す必要がある create_directories(".")
もしくはcreate_directories("..")
がエラーを報告しないようにした。実装は内部で再帰を使用しなくなったため、非常に長いパスでのスタックオーバーフローからより適切に保護される- GitHub #216 Windowsにおいて、
remove
が読み取り専用ファイルの削除をサポートするようになった。この操作は、削除のまえに読み取り専用属性をリセットするよう試みる。これにより、操作が失敗して属性の元の値が復元されない可能性があることに注意。これはremove_all
にも影響する remove_all
は、C++17のstd::filesystem
ライブラリと同様に、エラーが発生した場合にstatic_cast< uintmax_t >(-1)
を返すようになった- GitHub #215 ユーザーコードが
boost/filesystem/path.hpp
をインクルードするがboost/container_hash/hash.hpp
はインクルードせず、コンパイラが未使用のインライン関数を保持する設定になっていた場合に、Boost.ContainerHashの関数への未解決参照のリンクエラーが発生する問題を修正 - GitHub #217 リリースビルドでのパスのグローバルクリーンアップを排除するMSVCとその互換コンパイラに対してのワークアラウンドを追加。Boost.Fielsystemの共有ライブラリがプロセスで繰り返しロード、アンロードされた場合に、メモリリークにつながる可能性があった
Geometry
- 改善
- GitHub #894 rtreeのクエリ操作を最適化・リファクタ
- GitHub #913 DynamicGeometryとGeometryCollectionにさまざまなアルゴリズムのサポートを追加 (現在はアンドキュメント)
- GitHub #922 DynamicGeometryとGeometryCollectionにdistanceのサポートを追加 (現在はアンドキュメント)
- 解決した問題
- GitHUb #867 big kに近いpredicateをもつrtreeのクエリ操作が遅い
- GitHub #870
boost::geometry::self_turns
でのコンパイルエラーを修正 - GitHub #896
BOOST_GEOMETRY_NO_ROBUSTNESS
を定義した際にget_turns
でアサーション失敗が発生する問題を修正
- バグ修正
- GitHub #906 macos-11のclang-12でbufferが不正な結果となる問題を修正
- GitHub #921 複数コンパイラのC++20モードとGCC 5でのコンパイルエラーを修正
- 集合操作とbufferにさまざまを修正行った
JSON
- このライブラリのスタンドアローンモードを非推奨化
- 外部ライブラリでの
value_to
とvalue_from
の先行宣言を許可 - 数値をパースする際の、符号付き整数のオーバーフローを修正
- MSVCの
/Zc:implicitNoexcept-
をサポート
Lambda2
std::cout << _1
を許可するために、特殊ケースとして最初の引数がストリームでoperator<<
もしくはoperator>>
を使用した場合に対応operator->*
を追加first
,second
を追加
Log
- 全体的な変更
- GitHub #59 C++17以降との互換性のため、
std::codecvt
のchar16_t
とchar32_t
特殊化の検出を更新 - プロセス間メッセージキューのreceive関数にC++17
std::byte
のサポートを追加 - Windows 8以降でこのライブラリをビルドする際に、バージョン名前空間で
nt62
タグを使用してターゲットOSのABIを示すようにした。例として、バージョン名前空間にはv2_mt_nt62
という名前をつけることができる。この名前は、ライブラリによってエクスポートされるシンボルの一部となる。Boostと自身のコードをビルドする際は、BOOST_USE_WINAPI_VERSION
を一貫して使用し、Windowsの最小ターゲットバージョンを要求する dump
ストリームマニピュレータのSSSE3とAVX2向け実装のパフォーマンスを改善- CMakeビルドシステムのサポートを追加。現時点ではライブラリのビルドのみがサポートされており、テスト実行には引き続きBoost.Buildが使用される
- GitHub #59 C++17以降との互換性のため、
- バグ修正
- GitHub #162
reliable_message_queue::open_or_create
およびそれと等価なコンストラクタの、POSIXシステムでの競合状態を修正した。同じキューからの送受信と同時にopen_or_create
を呼び出す複数のスレッドまたはプロセスは、キューの内容を破壊し、プロセスをクラッシュさせる可能性があった - GitHub #164
BOOST_LOG_WITHOUT_SETTINGS_PARSERS
が定義されている場合、boost_log_setup
が欠落しているためにWindowsでb2 install
が失敗する問題に対するワークアラウンドを追加
- GitHub #162
- 詳細はchangelogを参照
Math
- cubic root (立方根) のサポートを追加
- さまざまな標準ライブラリの数学ルーチンの
constexpr
版のサポートを追加 - Bezier polynomialsのサポートを追加
- tanh-sinh integrationの最悪ケースのパフォーマンスを改善
- integrationルーチンでの整数型の不注意な使用を無効化
- 結果が1の2ulpとなるerf近似のマイナーアップデート
- Bernoulliコードをアトミック変数のないプラットフォームで使用できるようにした
- 非心モードのカイ二乗分布 (non-central Chi Squared distribution) を改善
- GitHub #507
<cstdfloat>
の複素数値の初等関数の特定のエッジケースを改善
Multi-index
- GitHub #35 キーベースのindicesに
contains
を追加 - キーベースのindicesに
merge
操作を追加。この機能は、いくつかの点で (非順序) 連想コンテナの標準仕様を超えている:- ソースのインデックスは、非キーベースのindicesを含むどの型でもよい
- 部分マージ (partial merge) を提供する。例として、
x.merge(y,first,last)
はy
の要素のうち[first, last)
の範囲のみをマージする
- sequenced indicesとrandom access indicesのこれまでの
splice
は破壊的だった。つまり、要素は挿入先にコピー挿入され、ソースからは削除されていた。現在のsplice
はキーベースのindicesのmerge
と同様にノード転送に基づいており、それらと同様になるよう拡張され、任意の型のインデックスを受け入れる。実際、splice
はキーベースのindicesのmerge
機能のフロントエンドを見なすことができる。下位互換性の理由から、コンテナ間でアロケータが異なる場合にsplice
の破壊的動作は維持される - インデックスのイテレータ型は
node_type
とそのmulti_index_container
内のインデックス位置にのみ依存するという事実がドキュメント化される (一意的 (uniqueness) か非一意的 (non-uniqueness) かに関わらずハッシュのindicesを除く)。これは、merge
やsplice
によって転送された要素に対するイテレータの有効性に影響する。C++標準のメーリングリストではSCARY iteratorsと呼ばれるものと同種である。SCARYnessは現在 (2021年8月)、標準コンテナには義務付けられていない - イテレータのSCARYnessはsafe modeでも保持される
Multiprecision
rational_adaptor
の再作業により、Boost.Rationalへの依存性を削除し、パフォーマンスを改善した- GitHub #383 Clangでのtype traitsの問題を修正
- GitHub #370 バグのあったLehmerのGCDルーチンを修正
mpc_complex
のコンストラクタでの精度を落とす変換がexplicit
になるよう修正- 雑多なconfigurationの問題を修正 (Intelの組み込み関数の使い方やApple Clang)
- unsigned char型のためにいくつかのiostream演算子を修正
- GitHub #342
mpq_rational
から整数型への変換を修正
PFR
std::addressof
のために不足していたインクルード<memory>
を追加- 空の集成体で起きていた
-Wzero-length-array
の警告を修正 - MSVCコンパイラ<= 1920でのコンパイルを修正 (Alexey Romanov @alexey-romanov氏に感謝)
- 基本的なCMakeLists.txtのサポートを追加 (Peter Dimov @pdimov氏に感謝)
- https://github.com/apolukhin/pfr_non_boost へのリンク追加を含む、ドキュメントの複数の改善
boost::
とBOOST_
プレフィックスを削除するmisc/strip_boost_namespace.sh
スクリプトを追加
Predef
- バージョン1.13.1
- "epoch"のつづりを修正
- sparc.h内での欠落していたカッコを追加 (tkoecker氏に感謝)
- ドキュメントを更新し、RougeコードスタイルとAmber汎用スタイルを使用するようにした
Regex
- 破壊的変更 Perlの動作に従って、
\B
を\b
の反対になるよう変更 w32_regex_traits.hpp
でwindows.h
をインクルードしないよう変更- 以下の問題を修正
- GitHub #151 大文字・小文字変更グループの繰り返しを、アサーション失敗からエラーに変更
- GitHub #152 GitHub #156
(*SKIP)
で見る際の再帰内のスタック巻き戻しを正しく修正 - GitHub #153
boost::regex_match
のメモリリークを修正
System
error_code
のsource locationサポートを追加error_code::to_string
,error_condition::to_string
,error_code::what
を追加- source locationをもつ場合に
system_error::what()
にその情報が含まれるようにした <boost/system/result.hpp>
に、値かエラーのいずれかを保持するresult<T, E = error_code>
クラスを追加
Utility
- GitHub #79 ライブラリドキュメントをQuickBookに変換 (Alan de Freitas氏に感謝)
Variant2
<boost/variant2.hpp>
を追加unsafe_get<I>
を追加visit_by_index
を追加operator<<
を追加
Build
- B2 version 4.7.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