最終更新日時:
が更新

履歴 編集

Boost 1.74.0リリースノート

本家リリースノート:

リポジトリは以下:

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

新ライブラリ

  • STLInterfaces
    • CRTPベースでSTLのビュー、イテレータ、シーケンスコンテナをかんたんに書けるライブラリ (作者Zach Laine)

更新ライブラリ

更新ツール

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, and asio_handler_deallocateフックのコンパイル時検出を追加した
  • いくつかのパフォーマンス最適化を実装
    • recvmsgの代わりにrecvsendmsgの代わりにsendreadvの代わりにreadwritevの代わりに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) から生成されたツリーのイベントのみを含むよう、ハンドラ追跡をフィルタして出力する。例として、ハンドラ123456およびそれらの先行タスク (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_atomicipc_atomic_refを新たに追加。非IPC型を使用したプロセス間コミュニケーションを移植する際には、新たなIPC型を使用することを推奨する。新たなIPCアトミック型は非IPCと同じ操作集合を提供するが、以下の違いがある:
    • ほとんどの操作に、アトミックオブジェクトのis_lock_freetrueであることと、という事前条件がある。この事前条件が満たされない場合、コンパイルエラーを発行する
    • 提供されるすべての機能はアドレスフリーである。つまり、この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 ilessiequalを異種混合ルックアップ (Heterogeneous Lookup) に対応
  • その他
    • GitHub #1907 SSL/TLSストリームを使用する場合は、OpenSSL 1.0.2以降が必要となる。これはBoost.Asioから継承された要件である
    • 利用可能な場合にC++20コルーチンとの正しい結合が行われていることを確認するテストを追加

Bimap

  • アロケータを正しく使用するよう修正 (C++20でのコンパイルを修正) (Glen Fernandes氏)

Config

  • BOOST_NO_CXX11_OVERRIDEBOOST_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のcanonicalread_symlinkでの再パースポイントのハンドリングを修正。これは実装にcanonicalread_symlinkを含む他のアルゴリズムにも影響する
  • GitHub #138 同じシンボリックリンクが同時に開かれた場合にWindowsでは、read_symlinkが失敗するか、他の場所で共有違反エラー (sharing violation error) で失敗する可能性があった問題を修正
  • GitHub #148 directory entryが実際にシンボリックリンクを参照している場合でも、 is_symlink(directory_entry)が常にfalseを返すよう修正
  • directory_entryerror_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向けに、sendfilecopy_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_optionscopy操作を実行すると、ディレクトリ内のファイルもコピーされる (ただし、入れ子になったディレクトリやそれらの中のファイルはコピーされない)
  • [追加] create_directoryに、2つのpathをとるオーバーロードを追加。2つ目のパスは、既存ディレクトリへのパスである。これは作成するディレクトリの権限属性の元として使用される
  • [非推奨化] 新たなcreate_directoryのオーバーロードのため、copy_directory操作を非推奨にした。この2つの操作では引数の順番が逆であることに注意しなければならない
  • GitHub #141 POSIXシステム向けのequivalentは、パスがファイルに解決されない場合、OSからerrno ENOENTを出力するようにした。以前までこの関数は、errno 1を返していた
  • 2つのパスが同じファイルを参照しているかを判定するequivalentは、ファイルサイズと最終更新日時を考慮しなくなった。これらのチェックはこの関数が呼び出し中にファイルが変更された場合に、偽陰性 (False Negative) になってしまう可能性があるためである
  • [追加] absoluteerror_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 #700 distanceアルゴリズムのデフォルト戦略で不足していたケースがあった問題を修正
    • GitHub #738 直接測地公式 (direct geodesic formulas) での範囲外の経度 (Longitudes) が出力される問題を修正

GIL

  • 追加
    • GitHub #486 右辺値参照からany_imageを初期化する新たなコンストラクタを追加
    • GitHub #489 reverse kernel_2dのメカニズムを実装
  • 変更
    • 破壊的変更 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 #481plane_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バージョンのアドレスのみが考慮される
  • 新機能
    • さまざまなコンポーネントのムーブコンストラクタとムーブ代入演算子を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に対する主要で大きな変更がいくつかある。詳細は先頭ページを参照
  • 強化
    • 破壊的変更 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_FOR210以下に設定しない限りはアップグレードが必要になる
    • コンセプトを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には間違ったプロトタイプがあり、ポリシークラス内での作業を妨げていた。申し訳ない

PolyCollection

  • GitHub #17 内部でboost::type_erasure::anyboost::anyがあいまいになってしまう問題を修正
  • メンテナンス作業

Polygon

  • 以下の機能をC++20向けに修正 (Glen Fernandes氏):
    • event_comparison_type
    • vertex_equality_predicate_type
    • voronoi_predicates

SmartPtr

  • shared_ptr, weak_ptr, local_shared_ptrowner_equalsを追加
  • shared_ptr, weak_ptrowner_hash_valueを追加
  • owner_hashowner_equal_toを追加
  • shared_ptr, local_shared_ptrstd::hashの特殊化を追加
  • weak_ptrに、boost::hashサポートと、std::hashstd::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

翻訳

Akira Takahashi