本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_74_0.qbk
- http://www.boost.org/users/history/version_1_74_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
- STLInterfaces
- CRTPベースでSTLのビュー、イテレータ、シーケンスコンテナをかんたんに書けるライブラリ (作者Zach Laine)
更新ライブラリ
- Asio
- Atomic
- Beast
- Bimap
- Config
- Core
- DLL
- Endian
- Filesystem
- Flyweight
- Format
- Geometry
- GIL
- Heap
- Integer
- Iterator
- LexicalCast
- Log
- Mp11
- Multi-index
- Nowide
- Outcome
- PolyCollection
- Polygon
- SmartPtr
- Stacetrace
- System
- TypeTraits
- Variant
- Variant2
- Wave
- YAP
更新ツール
Asio
- 標準に提案されたexecutorを実装して追加
- AsioのI/O機能に、標準に提案されたexecutorへのサポートを追加
- Asioのexecutorが、標準に提案されたexecutorの要件を満たすようになった。これらは、Networking TSのexecutorの要件も引き続き満たす
- すべてのI/Oオブジェクト、非同期操作、およびユーティリティは、新たに標準に提案されたexecutorおよびNetworking TSのexecutorと相互運用できる
- 型の別名
any_io_executor
は、すべてのI/Oオブジェクトに対するデフォルトの実行時多態的executorとして導入された。これはデフォルトでexecution::any_executor<>
テンプレートとなる。下位互換が必要な場合は、BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
を定義することで古いasio::executor
多態ラッパーが代わりに使用される BOOST_ASIO_NO_TS_EXECUTORS
を定義することで、既存のNetworking TSモデルexecutorのサポートを無効化できる
-
basic_waitable_timer
に、変換ムーブ構築と代入を追加。これにより、executorの型が変換可能であれば異なるタイマー型間でもムーブによる変換ができるようになる。例として:
basic_waitable_timer< clock_type, traits_type, io_context::executor_type > timer1(my_io_context); basic_waitable_timer< clock_type, traits_type, any_io_executor // 多態ラッパー > timer2(std::move(timer1));
-
GCC 10でC++20コルーチンを有効化
-
co_spawn
に、await可能なものを起動するオーバーロードを追加。以下のように記述できる:
co_spawn(executor, echo(std::move(socket)), detached);
- 以前まで書き方は以下:
co_spawn(executor, [socket = std::move(socket)]() mutable { return echo(std::move(socket)); }, detached);
-
executor型の間で変換をできるようにするために、
use_awaitable_t
のデフォルトexecutorアダプタに、新たなコンストラクタオーバーロードを追加 - メンバ
as_default_on()
とas_default_on_t<>
を追加することによる、デフォルト完了トークンとしてのdetached_t
の使用サポートを追加 ssl::stream<>
にムーブコンストラクタを追加ssl::stream<>
の書き込み操作を変更し、gather-write buffer sequenceを線形化したBOOST_ASIO_NO_DEPRECATED
が定義された際の、非推奨化されたasio_handler_invoke
,asio_handler_allocate
, andasio_handler_deallocate
フックのコンパイル時検出を追加した- いくつかのパフォーマンス最適化を実装
recvmsg
の代わりにrecv
、sendmsg
の代わりにsend
、readv
の代わりにread
、writev
の代わりにwrite
を使用するよう単一バッファ操作を特殊化- 多態ラッパー
executor
の参照カウントによるオーバーヘッドを軽減 - システムコールのラッパーから早期にreturnするようにし、エラーパスがある場合のみ
errno
とエラーコードにアクセスするようにした - 「ネイティブ」のI/O executor (
io_context::exeutor_type
など) が検出された場合に、追加の最適化を適用するようにした
-
ハンドラを追跡 (tracking) するためにsource locationのサポートを追加。新たなマクロ
BOOST_ASIO_HANDLER_LOCATION((file_name, line, function_name))
を使用してハンドラ追跡メカニズムにソース位置を伝えることができる。このマクロは、スタックに配置されるオブジェクトを宣言する。また、位置情報をともなって非同期操作を起動すると、非同期操作の開始を表す[^n*m]
行のまえに[*<action>] [^n^m]
行を使用して出力する。例として、
@asio|1589423304.861944|>7|ec=system:0,bytes_transferred=5 @asio|1589423304.861952|7^8|in 'async_write' (./../../../include/asio/impl/write.hpp:330) @asio|1589423304.861952|7^8|called from 'do_write' (handler_tracking/async_tcp_echo_server.cpp:62) @asio|1589423304.861952|7^8|called from 'operator()' (handler_tracking/async_tcp_echo_server.cpp:51) @asio|1589423304.861952|7*8|socket@0x7ff61c008230.async_send @asio|1589423304.861975|.8|non_blocking_send,ec=system:0,bytes_transferred=5 @asio|1589423304.861980|<7|
std::source_location
もしくはstd::experimental::source_location
が利用可能な場合、use_awaitable_t
も新たに作られた非同期操作ごとにハンドラ追跡にソース位置を出力する (デフォルト構築もしくはデフォルトの完了トークンとして使用された場合)。use_awaitable_t
オブジェクトも、位置情報をともなって明示的に構築することもできる。- handlerviz.plツールのさまざまな改善を実装
- グラフの下部に、保留中のハンドラノードを赤色で追加
- (SVG向けに) 辺ラベルのツールチップにソース位置を表示
- 関連する制御フローを垂直に保つための順序強制のために、非表示のノードを使用するようにした
- ハンドラを追跡して「生きている (live)」ハンドラのリストを生成して出力するhandlerlive.plツールを追加。生きているとは、保留中 (pending) の非同期操作に関連付けられたハンドラ、もしくは現在実行中のハンドラ。例として、以下のいずれかの形式で実行する:
cat output.txt | perl handlerlive.pl perl handerlive.pl < output.txt perl handlerlive.pl output.txt
-
handlertree.plツールを追加。これは指定されたハンドラ (nominated handlers) から生成されたツリーのイベントのみを含むよう、ハンドラ追跡をフィルタして出力する。例として、ハンドラ
123
と456
およびそれらの先行タスク (predecessors) に関連付けられたイベントのみが含まれるよう出力をフィルタするには、以下のいずれかのようにする:
cat output.txt | perl handlertree.pl 123 456 perl handlertree.pl 123 456 < output.txt
-
これらのツールは組み合わせて使用できる:
cat output.txt | \ perl handlertree.pl `perl handlerlive.pl output.txt` | \ perl handlerviz.pl | \ dot -Tsvg > output.svg
-
clangベースのEmbarcadero C++コンパイラの変更を追加
- 複数スレッドが並行にWindows I/O完了ポートバックエンドを初期化する際に発生する可能性のあったデッドロックを修正
- 左辺値を渡されたコピー完了ハンドラで
async_compose
が動作するよう修正 co_spawn
の完了シグニチャ推論を修正executor_binder
の実装から、spuriousなExecutor
基本クラスを削除- ドキュメントとサンプルコードのさまざまな修正と改善
- 詳細はRevision Historyを参照
Atomic
atomic_ref
クラスのいくつかの操作に不足していたconst
修飾を追加- ARMv8-A向けに
yield
命令のサポートを追加。この命令はCPUの消費電力を削減するために、スピンループで内部的に使用される - C++20のwait/notify操作のサポートを追加。この実装は内部ロックプールをともなう汎用的なバックエンドだけでなく、Windows, Linux, FreeBSD, DragonFly BSD, NetBSDに特化したバックエンドも含んでいる。atomic型には新たなメンバ関数
has_native_wait_notify
と、静的bool
定数always_has_native_wait_notify
、および実装が特定の型のネイティブなwait/notify操作をサポートしているかどうかを検出できる一連の機能検出マクロを提供する atomic_flag
の内部で32ビットストレージを使用するよう変更。これにより、いくつかのプラットフォームでatomic_flag
に対するwait/notify操作の効率が向上する- 内部のロックプールサイズをビルド時に設定できるようにした。ユーザーは
BOOST_ATOMIC_LOCK_POOL_SIZE_LOG2
マクロを定義して、2の対数でロックプールのサイズを指定できる。デフォルト値は8で、これはロックプールサイズ256を意味し、以前のリリースの64から増加している - プロセス間コミュニケーション専用のアトミック型の集合として、
ipc_atomic
とipc_atomic_ref
を新たに追加。非IPC型を使用したプロセス間コミュニケーションを移植する際には、新たなIPC型を使用することを推奨する。新たなIPCアトミック型は非IPCと同じ操作集合を提供するが、以下の違いがある:- ほとんどの操作に、アトミックオブジェクトの
is_lock_free
がtrue
であることと、という事前条件がある。この事前条件が満たされない場合、コンパイルエラーを発行する - 提供されるすべての機能はアドレスフリーである。つまり、このIPCアトミックオブジェクト (
ipc_atomic_ref
の場合は参照されるオブジェクト) はプロセス共有メモリに配置されるか、同じプロセスの異なる複数のアドレスにマッピングされる - 新たな
has_native_wait_notify
操作とalways_has_native_wait_notify
定数は、ネイティブのプロセス間wait/notify操作のサポート状態を表す。そのサポートがされない場合、ビジーループで実装され効率は低下するが、アドレスフリーのままである。このサポート状態を表すための個別の機能検出マクロも提供される
- ほとんどの操作に、アトミックオブジェクトの
- C++20で導入された
atomic_unsigned_lock_free
型とatomic_signed_lock_free
型を追加。これらの型はそれぞれ、符号なし整数と符号付き整数のアトミックオブジェクト型を表す。これらはロックフリーであり、可能であればwait/notify操作をネイティブでサポートしている - ARMv8-A (AArch32とAArch64の両方) 向けの新たなGCCアセンブラバックエンドを追加。この新たなバックエンドは、コンパイラの組み込み関数でサポートされていない操作 (AArch64向けの128ビット操作を含む) を実装するために使用され、コンパイラの組み込み関数が使用できない場合でも使用できる。リトルエンディアンとビッグエンディアンの両方のターゲットをサポートする。AArch64バックエンドはARMv8.1とARMv8.3で定義された拡張機能もサポートする
- GCCアセンブラブロック上のレガシーなARMバックエンド (ARMv7とそれより古いターゲット向けのバックエンド) でビッグエンディアンのターゲットサポートを追加。これまで、このバックエンドはリトルエンディアンのメモリレイアウトを想定しており、それは64ビット操作にとって重要だった
mfence
の代わりにlock
プレフィックスのついた命令を使用することにより、x86でのseq_cst
のstoreとthread fenceのパフォーマンスを改善した。これは、その操作が非一時的store (non-temporal store) に影響しなくなったことを意味し、以前までは保証されなかった。特化した命令と組み込み関数を使用することで、非一時メモリアクセス (non-temporal memory access) を要請するようにした- 128ビットのアトミック操作が利用可能であっても、x86ターゲットの80ビットの
long double
の機能検出マクロがロックフリーを示さない問題を修正 - Alphaターゲット向けGCCアセンブラブロックのコンパイルを修正
- GCCの
__sync*
組み込みバックエンドで、(ポインタサイズより大きい) 大きなオブジェクトに対するstoreとloadの操作が非アトミックになる可能性があった問題を修正。現在の実装は、全ての現代的なアーキテクチャで、小さなオブジェクトをひとつの命令で自動的にstoreできると想定している
Beast
- AsioのAPIが変更された。詳細はAsioのリリースノートを参照
- Beastは、Asioの変更への追従し、Asioの使用における開発者の選択を尊重するよう更新した。とくに以下のようにした:
BOOST_ASIO_NO_DEPRECATED
を定義した場合に、非推奨の実行とアロケーションフックを禁止するようにしたBOOST_ASIO_NO_TS_EXECUTORS
を定義した場合に、提案された標準Executorに準拠したexecutorを使用するようにしたBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT
を定義した場合に、Networking TSスタイルのexecutorをデフォルトで選択するようにした。これが定義されない場合は、AsioのExecutorはデフォルトで標準Executor実装になる
- GitHub #1897
body_limit
パーサーのパラメータをoptional
にした (API変更) 【必要な行動】basic_parser<>::body_limit(n)
のシグニチャを変更し、boost::optional<std::uint64_t>
を受けるようにした。呼び出し側はbody_limit(boost::none)
のように呼び出すことにより、ボディ制限が不要であることを示せるようになった。「デフォルトで安全」な動作を維持するために、デフォルトの制限は以前から変更はない
- GitHub #1934 非推奨インタフェースを削除 (API変更) 【必要な行動】
- マクロ
BOOST_BEAST_NO_DEPRECATED
はBeastにもはや通知されない。非推奨になった機能を有効にする唯一の方法は、デフォルトで定義されないBOOST_BEAST_ALLOW_DEPRECATED
マクロを定義することである。つまり、非推奨の機能はデフォルトで無効になっている - 以下の非推奨関数を削除した。これらの名前をまだ使用している場合は、
decorator
機能と名前変更されたhandshakeとaccept関数を使用するようリファクタする必要があるwebsocket::async_accept_ex
websocket::async_handshake_ex
websocket::accept_ex
websocket::handshake_ex
websocket::role_type
を削除した。代わりにbeast::role_type
を使用することhandler_ptr
を削除した。代わりにnet::bind_handler
および (もしくは)bind_front_handler
を使用することmutable_data_type
に依存したコードはmutable_buffers_type
を使用するようリファクタする必要がある。影響するクラスは以下:buffers_adaptor
flat_buffer
flat_static_buffer
multi_buffer
static_buffer
flat_static_buffer
からreset
関数を削除した。代わりにclear
関数を使用すること- 公開ヘッダ
core/type_traits.hpp
を削除し、それにともない型特性is_completion_handler
を削除した。Beastでは、Asioが提供するCompletionHandlerの正当性チェックを使用する。C++20環境では、これらはコンセプトチェックに変換される - エラーコード列挙型
invalid_code_lenths
(sic) はinvalid_code_lengths
の同義の型だった。影響を受けるプログラムはinvalid_code_lengths
を使用するようにする必要がある - 非推奨の型の別名
buffers_adapter
とともにcore/buffers_adapter.hpp
ファイルを削除した。影響を受けるプログラムはcore/buffers_adapator.hpp
ファイルとbuffers_adaptor
型を使用する必要がある
- マクロ
- GitHub #1956
string_param
を非推奨課 (API変更) 【必要な行動】- フィールド値を設定するときの引数型
string_param
を、string_view
に置き換えた。これによって、メッセージフィールドの値を整数として直接設定することはできなくなった。ユーザーはfields::set
などを呼び出す際に、数値の引数を文字列に変換してから渡す必要がある。Beastでは、この目的のためにメモリ割り当てを行わないto_static_string()
関数を提供している。Content-Lengthフィールドを手動で設定する場合は、message::content_length
を呼び出す
- フィールド値を設定するときの引数型
- 修正
- GitHub #1913 スタンドアロン版で
std::string_view
がコンパイルエラーになる問題を修正 - GitHUb #1925, GitHub #1916
/std:c++latest
オプションをつけたVisual Studioでコンパイルエラーになる問題を修正 - GitHub #1924
span_body
内で、C++20で警告がでていた問題を修正 - GitHub #1920
use_awaitable
付きでのbuffered_read_stream
の使用を修正 - GitHub #1918
use_awaitable
付きでのasync_detect_ssl
を修正 - GitHub #1944
FILE
の名前空間修飾を修正 - GitHub #1942 HTTP読み込みでの
bytes_transferred
を修正 - GitHub #1943
basic_stream::expires_after
を修正 - GitHub #1980
max
がコンパイルエラーになる問題を修正 - GitHub #1949
iless
とiequal
を異種混合ルックアップ (Heterogeneous Lookup) に対応
- GitHub #1913 スタンドアロン版で
- その他
- GitHub #1907 SSL/TLSストリームを使用する場合は、OpenSSL 1.0.2以降が必要となる。これはBoost.Asioから継承された要件である
- 利用可能な場合にC++20コルーチンとの正しい結合が行われていることを確認するテストを追加
Bimap
- アロケータを正しく使用するよう修正 (C++20でのコンパイルを修正) (Glen Fernandes氏)
Config
BOOST_NO_CXX11_OVERRIDE
とBOOST_OVERRIDE
を実装 (Glen Fernandes氏)
Core
allocator_traits
の代わりに個別のトレイトと関数に対する仕組みとして、アロケータアクセスのユーティリティを実装 (Glen Fernandes氏)。これらは、使用可能な場合はC++11のアロケータモデルをサポートし、C++98互換へのフォールバックを提供する。この機能は現在、以下のライブラリで使用している:- Circular_Buffer
- Wave
- Lockfree
- Heap
- Smart_Ptr
- Dynamic_Bitset
- Format
- Bimap
- その他
DLL
library_info
が空の共有オブジェクト (shared object) で動作するよう複数箇所を修正- GitHub #28 C++98とC++11モードでのコンパイルを修正
- GitHub #37
smart_library
のマングリングを修正 (XiaLiChao82氏に感謝)
Endian
endian_reverse
でのスコープ付き列挙型を有効にしたendian_reverse_inplace
でのbool
,enum
,float
,double
を有効にしたendian_reverse_inplace
に配列のオーバーロードを追加
Filesystem
- GitHub #142 Windowsでシンボリックリンク (symlink) とハードリンク (hardlink) のサポート状態についてのコンパイル時チェックを削除し、代わりに実行時チェックにした
- GitHub #100, GitHub #85, GitHub #99, GitHub #123, GitHub #125 Windowsの
canonical
とread_symlink
での再パースポイントのハンドリングを修正。これは実装にcanonical
とread_symlink
を含む他のアルゴリズムにも影響する - GitHub #138 同じシンボリックリンクが同時に開かれた場合にWindowsでは、
read_symlink
が失敗するか、他の場所で共有違反エラー (sharing violation error) で失敗する可能性があった問題を修正 - GitHub #148 directory entryが実際にシンボリックリンクを参照している場合でも、
is_symlink(directory_entry)
が常にfalse
を返すよう修正 directory_entry
とerror_code
用に不足していたステータス監視操作のオーバーロードを追加 (例としてis_directory(directory_entry, error_code&)
)。error_code
をとらないオーバーロードの誤ったnoexcept
指定を削除copy_file
について、C++20 ([fs.op.copy.file]/4.1) の要求に従って、ソースファイルとターゲットファイルのチェックを実行するよう実装を更新。とくに、ソースファイルとターゲットファイルが通常ファイル (regular file) でない場合、もしくはソースファイルとターゲットファイルが同じものを指している場合、操作は失敗する- POSIX向けの
copy_file
は、ターゲットファイルが上書きされた場合に、ソースファイルの権限でターゲットファイルの権限を上書きするようにした - [追加] Linux向けに、
sendfile
とcopy_file_range
のシステムコールに基づくcopy_file
の実装を追加。これにより、とくにネットワークファイルシステムでのファイルコピーのパフォーマンスが向上する可能性がある - [非推奨化]
copy_file
操作でのcopy_option
列挙型の使用は非推奨となった。代わりに新たな列挙型copy_options
(末尾にs
があることに注意) を追加。新たな列挙型には、C++20のcopy_options
列挙型と同様の値が含まれる。古い列挙型は新たな列挙型にマッピングされ、将来のリリースから削除される予定 - [追加]
copy_options::skip_existing
オプションを追加。これにより、ターゲットファイルが存在する場合に、ターゲットファイルを上書きせずにcopy_file
操作を成功させることができる - [追加]
copy_options::update_existing
オプションを追加。これによりcopy_file
操作は、ターゲットファイルが存在する場合に、その最終書き込み時間 (last write time) が置き換えファイルよりも古い場合に、条件付きで上書きできる - [追加]
copy_file
は、ファイルがコピーされたかどうかを表すbool
値を返すようになった - [追加, 破壊的変更] C++20の[fs.op.copy]で仕様化された動作を実装するために、
copy
操作を拡張・変更した。これには、copy_options::recursive
,copy_options::copy_symlinks
,copy_options::skip_symlinks
,copy_options::directories_only
,copy_options::create_symlinks
,copy_options::create_hard_links
オプションのサポートも含む。この操作は、指定されたオプションに基づいて追加のチェックを実行する。デフォルトのcopy_options
でcopy
操作を実行すると、ディレクトリ内のファイルもコピーされる (ただし、入れ子になったディレクトリやそれらの中のファイルはコピーされない) - [追加]
create_directory
に、2つのpath
をとるオーバーロードを追加。2つ目のパスは、既存ディレクトリへのパスである。これは作成するディレクトリの権限属性の元として使用される - [非推奨化] 新たな
create_directory
のオーバーロードのため、copy_directory
操作を非推奨にした。この2つの操作では引数の順番が逆であることに注意しなければならない - GitHub #141 POSIXシステム向けの
equivalent
は、パスがファイルに解決されない場合、OSからerrnoENOENT
を出力するようにした。以前までこの関数は、errno 1を返していた - 2つのパスが同じファイルを参照しているかを判定する
equivalent
は、ファイルサイズと最終更新日時を考慮しなくなった。これらのチェックはこの関数が呼び出し中にファイルが変更された場合に、偽陰性 (False Negative) になってしまう可能性があるためである - [追加]
absolute
にerror_code
引数をとるオーバーロードを追加 - 引数のデフォルト値として
current_path()
をとり、error_code
引数をとる操作は、current_path(error_code&)
オーバーロードを使用して現在の作業ディレクトリを取得し、その失敗が例外ではなくerror_code
引数を介して報告されるようになった - C++20 ([fs.op.space]/1)の要求に応じて、
space
はエラー時にspace_info
構造体のメンバを-1値に初期化して返すようにした - GitHub #73 Windows向けの
space
はディレクトリだけでなく任意のファイルを参照するパスを受け付けるようになった。これはPOSIXシステムと同様であり、C++20のこの操作の仕様にも対応している - [追加] GitHub #25 Windows CE向けに
temp_directory_path
の実装を追加 - [追加] GitHub #144 WASIプラットフォームの互換性を改善
- [追加] GitHub #130 Embarcaderoコンパイラのサポートを改善
- [追加]
getrandom
(Linux),arc4random_buf
(OpenBSD/FreeBSD/CloudABI), BCrypt (Windows) システムAPI向けのunique_path
の実装を追加 - [非推奨化] MSVC互換のコンパイラを使用したWindowsのシステムライブラリに対する自動リンクを非推奨とし、将来のリリースから削除することとなった。これは、Boost.Filesystemの静的ライブラリ (static library) をリンクしているユーザーに影響がある。ユーザーは、Boost.Filesystemの共有ライブラリ (shared library) を使用するようプロジェクトのビルドシステムを更新するか、リンカーのコマンドラインでBoost.Filesystemの依存関係を明示的に指定することを推奨する。Boost.Filesystemの共有ライブラリを使用しているユーザーには影響しない
Flyweight
- メンテナンス作業
Format
- アロケータを正しく使用するよう修正 (C++20でのコンパイルを修正) (Glen Fernandes氏)
Geometry
- 改善
- GitHub #720 R-treeのコンストラクタを追加 (Caian Benedicto氏に感謝)
- buffer, 集合演算、関係演算のさまざまな改善
- 解決したissue
- GitHub #709 非トリビアルなオブジェクトのコピー代入で
memcpy
をしていた問題を修正 - GitHub #721
bgi::detail::rtree::visitors::insert
でのコンパイルエラーを修正 - GitHub #727 MSVCでの「条件式が定数」警告を修正
- GitHub #709 非トリビアルなオブジェクトのコピー代入で
- バグ修正
- GitHub #700 distanceアルゴリズムのデフォルト戦略で不足していたケースがあった問題を修正
- GitHub #738 直接測地公式 (direct geodesic formulas) での範囲外の経度 (Longitudes) が出力される問題を修正
GIL
- 追加
- GitHub #486 右辺値参照から
any_image
を初期化する新たなコンストラクタを追加 - GitHub #489 reverse
kernel_2d
のメカニズムを実装
- GitHub #486 右辺値参照から
- 変更
- 破壊的変更 GitHub #474 Boost.VariantからBoost.Variant2に置き換え、Boost.MPLを使用している部分を完全になくした (GitHub #274 Boost 1.72.0での不足していた対応)
- GitHub #491
apply_operation
からvisit
に完全転送するようにした
- 削除
- 破壊的変更 Boost.Variantへの依存を削除
- 修正
- GitHub #470 RGB8からCMYK32からの不正な変換によってオーバーフローが発生していた問題を修正
- GitHUb #477 他のテンプレートパラメータをもつ
image
からimage
への変換を修正 - GitHub #481 「
plane_view_t
はクラスでも名前空間でもない」というエラーを修正 - GitHub #487 次元として
point<std::ptrdiff_t>
を使用するinterleaved_view
ファクトリを修正 - GitHub #494 チュートリアルのドキュメントでMPLの代わりにMp11を使用するよう修正
- GitHub #502
numeric/kernel.hpp
内での不足ヘッダを修正して自己完結させた
- 謝辞
- Samuel Debionne, Pranam Lashkari, Mateusz Loskot, Debabrata Mandal
Heap
skew_heap
のtop nodeの破棄が正しく行われるよう修正 (Glen Fernandes氏)- アロケータを正しくかつシンプルに使用するよう修正 (Glen Fernandes氏)
Integer
- clang 10のC++20モードでの
gcd
のコンパイルエラーを修正 - GitHub #21 Embarcaderoコンパイラのサポートを改善
Iterator
- GitHub #51
boost/function_output_iterator.hpp
ヘッダを非推奨化。ユーザーはboost/iterator/function_output_iterator.hpp
に置き換える必要がある - GitHub #55 Embarcaderoコンパイラのサポートを改善
LexicalCast
- GitHub #35, GitHub #34
override
が不足していることによる警告を修正 (EugeneZelenko氏に感謝) - Embarcaderoコンパイラ向けの修正 (Edward Diener氏に感謝)
Log
- バグ修正
- GitHub #119 syslog sink backendが、ユーザーが設定したローカルアドレスとターゲットアドレスのIPバージョンを検証するようにした。そのアドレスは、sink backendを構築する際の名前付きパラメータ
ip_version
で指定されたものと同じIPバージョンを持っていなければならない (デフォルトはIPv4と仮定される)。ホスト名解決の結果としてアドレスが取得される場合は、一致するIPバージョンのアドレスのみが考慮される
- GitHub #119 syslog sink backendが、ユーザーが設定したローカルアドレスとターゲットアドレスのIPバージョンを検証するようにした。そのアドレスは、sink backendを構築する際の名前付きパラメータ
- 新機能
- さまざまなコンポーネントのムーブコンストラクタとムーブ代入演算子を
noexcept
にした - 範囲の要素を出力するために使用できる
range_manip
ストリームマニピュレータを追加。オプションとして区切り文字を指定できる - タプルおよびその他あらゆる異種混合シーケンス (構造体とか) の要素を出力するために使用できる
tuple_manip
ストリームマニピュレータを追加。オプションとして区切り文字を指定できる - optionalに表現可能な値を出力するために使用できる
optional_manip
ストリームマニピュレータを追加
- さまざまなコンポーネントのムーブコンストラクタとムーブ代入演算子を
- 詳細はChangelogを参照
Mp11
- 大きい
N
でのmp_with_index<N>
のコンパイルパフォーマンスを改善 tuple_transform
を追加 (Hans Dembinski氏によるコントリビュート)
Multi-index
- GitHub #32 読み書きのキー抽出器 (key extractors) に関するドキュメントを明確化
- メンテナンス作業
Nowide
- このライブラリは、C++11準拠のコンパイラと標準ライブラリを要求するようになった
- LFS: 基礎システムがサポートする2GBを超えるファイルのサポートを追加
boost::nowide::utf
名前空間で、ジェネリックなUTF変換関数を使用可能にした- UTF-8パスでの
stat
のサポートを追加
Outcome
- アナウンス
- v2.1ブランチは2020年末に廃止する予定で、v2.2ブランチがデフォルトになる。将来のv2.2ブランチの機能は、
better_optimisation
で使用できる。このブランチは、Outcome v2.1に対する主要で大きな変更がいくつかある。詳細は先頭ページを参照
- v2.1ブランチは2020年末に廃止する予定で、v2.2ブランチがデフォルトになる。将来のv2.2ブランチの機能は、
- 強化
- 破壊的変更
void
のresultとoutcomeからのexplicit
構築でデフォルト構築が行われなくなった。以前はエラーのないresult<void>
からresult<T>
に明示的に構築した場合、T
がデフォルト構築されていた。これは役に立たない驚きを与えてしまっていたため、無効にした - 新たなマクロ
OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
。このマクロは、新しいバージョンのOutcomeを使用する際に、古い名前で新たな機能を使用する別名を有効にすることができる - コンセプトをCamelCaseからsnake_caseにした。Outcomeが最初に実装されたとき、C++20はCamelCaseスタイルのコンセプトが入ると考えられていた。これはC++20のリリース前に変更され、Outcomeもそれに合わせて名前を変更した。互換用の別名が提供されるため、Outcome v2.1については既存コードを破壊しない。ただし、Outcome v2.2でコンパイルするコードについては、
OUTCOME_ENABLE_LEGACY_SUPPORT_FOR
を210
以下に設定しない限りはアップグレードが必要になる - コンセプトを
OUTCOME_V2_NAMESPACE::concepts
名前空間に置くようにした。以前までコンセプトはconvert
名前空間にあったが、現在は専用の名前空間にある - 新たなコンセプト
basic_result<T>
とbasic_outcome<T>
を追加。エンドユーザーにとってis_basic_result <T>
とvalue_or_error <T>
の間に役立たないギャップがあったため、basic_result
にマッチするコンセプトが求められていた TRY
操作は、Outcome v2.2以降では動作が異なる。OUTCOME_TRY()
を使用するコードが破壊的変更される大きな変更になる。コードをアップグレードする正規表現が、Outcome v2.1からv2.2への変更リストにある
- 破壊的変更
- バグ修正
- GitHub #224 Xcode 11.4 (現在の最新) に含まれるclang Appleには
noexcept(std::is_constructible<T, void>)
がコンパイルに失敗する問題を修正したパッチが適用されていない。このパッチは数年前に提出した。Appleがclangを修正するのを諦めて、Outcomeにワークアラウンドを追加した - 値をもたないポリシークラスから、予備ストレージ (spare storage) を使用できなかった。当時このコードを書いたときは頭がおかしくなっており、予備ストレージAPIには間違ったプロトタイプがあり、ポリシークラス内での作業を妨げていた。申し訳ない
- GitHub #224 Xcode 11.4 (現在の最新) に含まれるclang Appleには
PolyCollection
- GitHub #17 内部で
boost::type_erasure::any
とboost::any
があいまいになってしまう問題を修正 - メンテナンス作業
Polygon
- 以下の機能をC++20向けに修正 (Glen Fernandes氏):
event_comparison_type
vertex_equality_predicate_type
voronoi_predicates
SmartPtr
shared_ptr
,weak_ptr
,local_shared_ptr
にowner_equals
を追加shared_ptr
,weak_ptr
にowner_hash_value
を追加owner_hash
にowner_equal_to
を追加shared_ptr
,local_shared_ptr
にstd::hash
の特殊化を追加weak_ptr
に、boost::hash
サポートと、std::hash
とstd::equal_to
の特殊化を追加
Stacktrace
- GitHub #91
-fno-exceptions
でコンパイルした際のビルドエラーを修正 (Jeremiah Rodriguez氏に感謝)
System
operator bool()
がvalue() != 0
の代わりにfailed()
を返すようにした
TypeTraits
- 以下を実装 (Glen Fernandes氏) :
conjunction
disjunction
negation
is_trivially_copyable
is_scoped_enum
is_unscoped_enum
Variant
- GitHub #78
override
が不足していることによる警告を修正 (EugeneZelenko氏に感謝) - GitHub #79 Embarcaderoコンパイラ向けの修正
- GitHub #80 非推奨ヘッダを使用することによる警告を回避するために、ヘッダ位置を更新 (Andrey Semashev氏に感謝)
Variant2
visit
に派生型のサポートを追加- 多く (数百) の候補型を指定した場合のコンパイルパフォーマンスを改善
visit<R>
のサポートを追加
Wave
- GitHub #75
__VA_OPT__
を含む可変引数関係のC++20機能をを実装 - GitHUb #102
__has_include
を実装 - GitHub #97 Boost自体で役立つ新たなサンプルとして
check_macro_naming
を追加 - GitHub #72 C++20での
std::allocator
クラスのメンバが削除されたことにともない、コンパイル問題を修正 - GitHub #79 Xpressiveのlexerと
token_statistics
のサンプルを修復 - GitHub #78 lexertl lexerを修復
- GitHUb #87 事前定義マクロに対してもフックが実行されるようにした
- いくつかの小さなバグを修正
- C++98/03のサポートを非推奨にした。バージョン1.77でで削除する予定
YAP
- プレースホルダーのコンパイルエラーを修正。一般的なケースで動作するようになり、とくに
yap::print()
で使用できる - YAPのすべてをconstexprにした
yap::print()
で、正しい値カテゴリの出力を修正- ドキュメントを明確化
Boostbook
- 生成されるドキュメントの文字コードをUS-ASCIIからUTF-8に変更 (Glen Fernandes氏)
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.0, 4.0.1, 6.0.1
- Clang, C++0x: 3.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
- Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
- Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
- GCC: 4.4.7, 4.5.3, 4.6.3, 5.4.0, 8.0.1
- GCC, C++0x: 4.4.7
- GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
- GCC, C++14: 5.4.0, 5.5.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1
- GCC, C++17: 7.3.0, 8.0.1
- Intel, C++14: 18.0
- OS X:
- Apple Clang: 9.0.0, 9.1.0, 10.0.0
- Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
- Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
- Apple Clang, C++17: 9.1.0, 10.0.0
- Apple Clang, C++1z: 9.0.0
- Apple Clang, C++2a: 10.0.0
- Windows:
- GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
- GCC, C++0x: 4.6.4
- GCC, C++11: 4.7.3, 4.8.1, 4.9.3
- GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
- GCC, C++17: 7.1.0, 7.2.0, 7.3.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
- FreeBSD:
- Clang: 4.0.0
- Clang, C++11: 4.0.0
- Clang, C++14: 4.0.0
- Clang, C++1z: 4.0.0
追加で含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.8.1, 3.9.1, 4.0.1, 5.0.2, 6.0.1
- Clang, C++0x: 3.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 6.0.1, 7.0.0, 8.0.0
- Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 4.0.1, 5.0.2, 6.0.1, 7.0.0, 8.0.0
- Clang, C++17: 5.0.2, 6.0.1, 7.0.0, 8.0.0
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.9.4, 5.4.0, 5.5.0, 8.0.1
- GCC, C++0x: 4.4.7
- GCC, C++11: 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 8.0.1
- GCC, C++14: 5.4.0, 5.5.0, 6.3.0, 6.4.0, 7.1.0, 7.3.0, 8.0.1, 8.1.0
- GCC, C++17: 7.3.0, 8.0.1
- Intel, C++14: 18.0
- OS X:
- Apple Clang: 9.0.0, 9.1.0, 10.0.0
- Apple Clang, C++11: 9.0.0, 9.1.0, 10.0.0
- Apple Clang, C++14: 9.0.0, 9.1.0, 10.0.0
- Apple Clang, C++17: 9.1.0, 10.0.0
- Apple Clang, C++1z: 9.0.0
- Apple Clang, C++2a: 10.0.0
- Windows:
- GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
- GCC, C++0x: 4.6.4
- GCC, C++11: 4.7.3, 4.8.1, 4.9.3
- GCC, C++14: 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 6.4.0
- GCC, C++17: 7.1.0, 7.2.0, 7.3.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
- FreeBSD:
- Clang: 4.0.0
- Clang, C++11: 4.0.0
- Clang, C++14: 4.0.0
- Clang, C++1z: 4.0.0