本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_66_0.qbk
- http://www.boost.org/users/history/version_1_66_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
Visual Studio新バージョンリリースについて
Visual Studio 2017 Update 5がリリースされた直後にBoostのリリースが行われたため、そのバージョンのVisual Studioでのテストは間に合わなかった。
新ライブラリ
- Beast
- C++11以降限定のポータブルなHTTP、WebSocket、その他ネットワーク操作のライブラリ。作者Vinnie Falco氏
- CallableTraits
- Boost.FunctionTypesの精神的な後継ライブラリ。C++11以降限定のライブラリで、
callable
(関数呼び出し可能) に関する全ての型検査と型操作を提供する。作者Barrett Adair氏
- Boost.FunctionTypesの精神的な後継ライブラリ。C++11以降限定のライブラリで、
- Mp11
- C++11のメタプログラミングライブラリ。作者Peter Dimov氏
更新ライブラリ
- Asio
- Atomic
- DateTime
- Fiber
- Format
- Fusion
- Geometry
- Iterator
- Log
- Math
- Multi-index
- Optional
- PolyCollection
- Predef
- Regex
- Stacktrace
- Thread
- Utility
- Uuid
- Variant
Asio
- Networking TSによるインタフェース変更を反映させた (N4546)
- Networking TSによって置き換えられた関数とクラスは非推奨となった
- サービステンプレートパラメータと対応するクラスは、デフォルトで無効となった。例として
basic_socket<Protocol, SocketService>
の代わりにシンプルなbasic_socket<Protocol>
がある。古いインタフェースを有効にする場合は、BOOST_ASIO_ENABLE_OLD_SERVICES
マクロをdefineすること
- 以前から非推奨だった関数を削除
- ハンドラトラッキングのカスタマイズをサポート
- ハンドラトラッキングのためにreactor関係のイベントを追加 (ディスクリプタの準備ができた、とか)
io_context
単位でロックを無効化するために使用する、特殊な「並行性のヒント (concurrency hint)」を追加ssl::stream<>
の最初のコンストラクタ引数の完全転送を可能にした- 低レイヤーネイティブソケット (underlying native socket) の所有権を手放す機能を追加した (この機能を使用するには、Windows 8.1以降のI/O完了ポートバックエンドが必要)
- Networking TSによるインタフェース変更のリストは以下:
io_service
をio_context
に変更。io_service
はtypedefとして残るio_service::dispatch()
を非メンバ関数のdispatch()
に変更。任意のExecutor/Contextで実行できるようにするためio_service::post()
を非メンバ関数のpost()
に変更。任意のExecutor/Contextで実行できるようにするためasio_handler_is_continuation
フック付きのio_service::post()
を非メンバ関数defer()
に変更error_code&
をとるio_service::poll()
をio_context::poll()
に変更error_code&
をとるio_service::poll_one()
をio_context::poll_one()
に変更error_code&
をとるio_service::run()
をio_context::run()
に変更error_code&
をとるio_service::run_one()
をio_context::run_one()
に変更- 時間制限付き実行の機能として、
io_context::run_for()
、io_context::run_until()
、io_context::run_one_for()
、io_context::run_one_until()
を追加 io_service::reset()
をio_context::restart()
に変更io_service
をexecution_context
に変更。io_service::service
をexecution_context::service
に変更。io_service::id
をexecution_context::id
に変更。サービス関係の機能はexecution_context
基本クラスに移動となったmake_service()
をadd_service()
に変更io_service::strand
をstrand
に変更。あらゆるExecutorで動作するようにしたio_service::work
をexecutor_work_guard
とmake_work_guard()
に変更。あらゆるExecutorで動作するようにしたio_service::wrap
とio_service::strand::wrap
をexecutor_binder
とbind_executor
に変更。あらゆるExecutorで動作するようにしたasio_handler_invoke
フックをassociated_executor
とget_associated_executor
に変更asio_handler_allocate
フックとasio_handler_deallocate
フックを、associated_allocator
とget_associated_allocator
に変更buffer_cast()
をconst_buffer::data()
とmutable_buffer::data()
に変更- 単一バッファ用の
buffer_size()
をconst_buffer::size()
とmutable_buffer::size()
に変更 const_buffers_1
をconst_buffer
に変更mutable_buffers_1
をmutable_buffer
に変更basic_io_object::get_io_service()
をbasic_socket::get_executor()
に変更。タイマーやシリアルポート関係の同様のメンバ関数も同じsocket_base::max_connections()
をsocket_base::max_listen_connections()
に変更basic_socket::wait()
、basic_socket::async_wait()
、basic_socket_acceptor::wait()
、basic_socket_acceptor::async_wait()
をsocket_base::wait_type
に変更basic_socket_acceptor::accept()
がソケットの参照をパラメータでとっていたが、ソケットを戻り値で返すよう変更。これはC++11以降でムーブサポートされている場合のみ使用できるbasic_socket_acceptor::async_accept()
がソケットの参照をパラメータでとっていたが、ハンドラに渡されるよう変更。これはC++11以降でムーブサポートされている場合のみ使用できるconnect()
とasync_connect()
がイテレータをひとつだけとっていたが、イテレータ範囲をとるよう変更basic_socket_streambuf::duration_type
をbasic_socket_streambuf::duration
に変更basic_socket_streambuf::time_type
をbasic_socket_streambuf::time_point
に変更basic_socket_streambuf::expires_at()
とbasic_socket_streambuf::expires_from_now()
のゲッターをbasic_socket_streambuf::expiry()
に変更basic_socket_streambuf::expires_from_now()
のセッターをbasic_socket_streambuf::expires_after()
に変更basic_socket_streambuf::puberror
をbasic_socket_streambuf::error
に変更basic_socket_iostream::duration_type
をbasic_socket_iostream::duration
に変更basic_socket_iostream::time_type
をbasic_socket_iostream::time_point
に変更basic_socket_iostream::expires_at()
とbasic_socket_iostream::expires_from_now()
のゲッターをbasic_socket_iostream::expiry()
に変更basic_socket_iostream::expires_from_now()
のセッターをbasic_socket_iostream::expires_after()
に変更error_code&
をとるbasic_waitable_timer::cancel()
をbasic_waitable_timer::cancel()
に変更error_code&
をとるbasic_waitable_timer::expires_at()
のセッターをbasic_waitable_timer::expires_at()
に変更basic_waitable_timer::expires_at
とbasic_waitable_timer::expires_from_now()
のゲッターをbasic_waitable_timer::expiry()
に変更basic_waitable_timer::expires_from_now()
のセッターをbasic_waitable_timer::expires_after()
に変更ip::address::from_string()
をip::make_address()
に変更ip::address_v4::from_string()
とip::address_v6::to_v4()
をip::make_address_v4()
に変更ip::address_v6::from_string()
とip::address_v6::v4_mapped()
をip::make_address_v6()
に変更error_code&
をとるip::address::to_string()
をip::address::to_string()
に変更error_code&
をとるip::address_v4::to_string()
をip::address_v4::to_string()
に変更error_code&
をとるip::address_v6::to_string()
をip::address_v6::to_string()
に変更ip::address_v6::v4_compatible()
をip::address_v6::is_v4_compatible()
に変更ip::address_v4::broadcast
、ip::address_v4::is_class_a
、ip::address_v4::is_class_b
、ip::address_v4::is_class_c
、ip::address_v4::netmask
を、ip::network_v4
に変更。このクラスはCIDR notationを使用してIPv4ネットワークの計算を行う機能をもつip::network_v6
を追加。このクラスはCIDR notationを使用してIPv6ネットワークの計算を行う機能をもつip::address_v4_iterator
とip::address_v4_range
を追加。これらはIPv4アドレスのサブセットをイテレートする機能をもつip::address_v6_iterator
とip::address_v6_range
を追加。これらはIPv6アドレスのサブセットをイテレートする機能をもつip::basic_resolver::iterator
をip::basic_resolver::results_type
に変更。単一イテレータではなく範囲を返すようになったip::basic_resolver::query
を引数にとるip::basic_resolver::resolve()
を、ホスト名とサービスを引数にとるよう変更ip::basic_resolver::resolve()
が単一イテレータではなく範囲を返すよう変更ip::basic_resolver::query
を引数にとるip::basic_resolver::async_resolve()
を、ホスト名とサービスを引数にとるよう変更ip::basic_resolver::async_resolve()
の完了がンドラに単一イテレータではなく範囲が渡されるよう変更
Atomic
- 整数型の拡張アトミック命令を実験的に実装
fetch_negate
とfetch_complement
はアトミックに符号反転(2の補数)、もしくは1の補数(ビット反転)へ置換え、もとの値を返すopaque_<op>
は対応するfetch_<op>
に等しいが、値を返さない<op>_and_test
は<op>
をアトミックに行い、結果が0
であるならばtrue
を返す- 注意 : この操作は、1.67.0では反対の結果となる。これらの関数を使用したコードは更新する必要がある
bit_test_and_set
、bit_test_and_reset
およびbit_test_and_complement
はアトミックに指定したビットを1
にする(set
)、0
にする(reset
)もしくはビット反転(complement
)し、そのビットのもとの値を返す- 訳者註: 原文ではそのビットのもとの値を返すとなっているが、戻り値の型は
bool
型であることに注意
- 訳者註: 原文ではそのビットのもとの値を返すとなっているが、戻り値の型は
- P0558R1で提案、C++17に採択されたポインターを介した整数演算の削除に追従。それらはもう提供されなくなった
- C++17で追加された
atomic<T>::value_type
とatomic<T>::difference_type
にも追従し、ユーザコードで使用可能となった - GCC 7へのサポートを改善し、x86-64環境下での128bit演算にはコンパイラ提供の
libatomic
へのリンクは不要となった
DateTime
- Windows SDKの抽象レイヤーとしてBoost.WinAPIを使用するようにした
- 日付から大きな年を加算・減算した際に、整数オーバーフローによって不正な結果になっていた問題を修正
Fiber
- CUDAストリームと同期できるようになった
- ROCm/HIPストリームと同期できるようになった
Format
- 改善
- 新たな変換指定子を追加
- GitHub #42 ISO 99の新たな引数型
j
(intmax_t
) とz
(size_t
) を追加。これは値の解析をし、型としては単に無視する - GitHub #44 Microsoftの新たな引数型プレフィックス
I
(ptrdiff_t
)、I32
(__int32
)、I64
(__int64
)、w
(wchar_t
) を追加 - GitHub #33
format_matrix
という新たな開発ツールを追加した。これはできるだけ多くの可能なフォーマットを組み合わせて、ファイルに記録する:- Boostリリース時の回帰テストに役立つ
snprintf
との比較ができる
- バグ修正
- GitHub #36
volatile
引数に対して安全にoperator%
を使用できるようにした - Trac #4636 MSVC環境で値の丸め処理が
/RTCc
オプション (ランタイムエラーチェック) によって失敗していた問題を修正 - Trac #7477 MSVCの
/Za
オプション (Microsoftの言語拡張を使用しない) との互換性を修正 - Trac #10324 不正な
const_cast
による警告を修正 - Trac #11632 静的解析して問題があった
alt_sstream.hpp
を修正
- GitHub #36
Fusion
- PR#149
isspace(c)
はVxWorksのDinkum clibではマクロとして実装されていないこと対応。Brian Kuhl(@kuhlenough)氏に感謝 - PR#150 循環したプリプロセッサのインクルードを修正。Gregor Jasny(@gjasny)氏に感謝
- PR#151
fusion::tuple
の基底クラスが変更された - PR#153
std::array
でコンパイルエラーになることがあるのを修正 - PR#154 C++03において、ネストしたコンテナのコピーでバグがあったのを修正
Geometry
改善
- PointLike/AnyGeometry間のgeometric戦略での
distance
を追加
バグ修正
- 非常に複雑な状況で
union
/intersection
/difference
が誤った結果になる問題を修正 union
/intersection
/difference
/buffer
の妥当性 (validity) を修正- 非デカルト座標系での集合・関係演算を修正
Log
file_collector::scan_for_files()
のバグを修正。ユーザーアプリケーションの再起動後、ターゲットディレクトリ内のログファイル名が不正になることがあった
Iterator
next()
とprior()
関数は、ネストした型(例えばiterator_category
やdifference_type
といったような型特性に関わる型)を定義していないようなユーザイテレータをサポートするようになった。代わりにそれらの型を扱うにはstd::iterator_traits
を特殊化すること。これが正しく動作するためにはC++17準拠のstd::iterator_traits
をサポートした環境が必要である
Math
- ガウス求積法 (Gauss quadrature) とガウス=クロンロッド求積法 (Gauss-Kronrod quadrature) のルーチンを追加
- 二重指数関数型数値積分 (double-exponential quadrature) のルーチンを追加 (tanh-sinh, exp-sinh, sinh-sinh)
- チェビシェフ多項式 (Chebyshev polynomial) の評価 (evaluation)、平方根 (roots)、積分 (integration)、微分 (differentiation)、内挿 (interpolation, 補間) のルーチンを追加
Multi-index
-
modify()
とmodify_key()
をより頑強にし、Modifierで例外が送出された場合や、Rollback関数で復旧がされなかった場合に、変更要素を消去するようにした (完全な議論は Trac #12542 を参照)。これは技術的には後方互換性がなく、以下のコードにおいて:
c.modify(c.begin(),[](auto&){throw 0;});
Boostの以前のバージョンでは
c
は維持されたが、現在はc.begin()
の要素は消去される。この問題を提起したJon Kalb氏に感謝する -
メンテナンス上の修正
Optional
- 新しいコンパイラでは、Tがスカラー型の場合
optional<T>
がトリビアルコピー可能となった。これは、これまでとは異なるストレージ(aligned_storage ではなく、単なる T)を用いることで実現している。 我々はコンパイラが default宣言 された関数をサポートすることを必須としている - GCC が
-Wmaybe-uninitialized
の警告を誤って出すのを防止するため、operator==
の実装を変更
PolyCollection
- GCC 4.8から4.9、Clang 3.3から3.6といった古いバージョンのコンパイラで動作するようバックポートした。GCC 4.8のlibstdc++-v3では、一部の機能が欠如しているために、以下の制限がある (Clangでlibstdc++を使用する場合も同様)。
- 状態を持つアロケータがない
- アロケータのムーブ構築がコピー構築にdecayされる
- 要素のコピー中に例外が送出されると、コピー構築がクラッシュする
- メンテナンス上の修正
Predef
- Windows Universal Platformの検出を改善した (James E. King, III氏に感謝)
- cloudlibcを使用したCloudABIの検出を追加 (James E. King, III氏に感謝)
- その他バグ修正
Regex
- de-fuzzingによって発見されたセキュリティ問題に対する小さな修正をした
Stacktrace
- 常識から外れたMinGW-w64環境で動作するようにした
libbacktrace
がインストールされたMinGW環境 (-w64
なし) で動作するようにした。さらなる情報は、MinGWの「MinGW specific notes」セクションを参照
Thread
バグ修正
- Trac #12323 Windows環境で関数ポインタ
_pRawDllMainOrig
のシグニチャが間違っていた問題を修正 - Trac #12730 MSVC 2017でTLS cleanup hooks関係のシグニチャが変わった問題に対処
- Trac #12976 Boost Thread Executorsのドキュメント間違いを修正
- Trac #12949
BOOST_THREAD_HAS_CONDATTR_SET_CLOCK_MONOTONIC
を定義してもスリープ操作がモノトニックにならなかった問題について、インクルード不足でも誤って動作してしまっていたのを修正 - Trac #13019
BOOST_THREAD_PROVIDES_INTERRUPTIONS
定義時のABI互換が不完全だった問題を修正 - Trac #13069, GitHub #132, GitHub #134, GitHub #135, GitHub #136, GitHub #137 MSVC 2015環境でスレッドプールのテストがハング・デッドロックしていた問題を修正
- Trac #13163 可変引数テンプレートをもたない環境で
boost::detail::heap_new()
が引数4個までしかサポートされていなかったため、9個まで使用できるようにした - Trac #13226 POSIX環境で
getpagesize()
が非推奨になったため、ワークアラウンドを入れた - GitHub #133 Windows環境でSpuriousなテイミングテストが失敗していたため、タイムアウトの閾値を修正
- GitHub #143 MSVC 12.0でコンパイルエラーになる問題を修正
- GitHub #145
BOOST_THREAD_ATTRIBUTE_MAY_ALIAS
定義時にClangでコンパイルエラーになる問題を修正
新たな実験的機能
- GitHub #116
promise
クラスに、遅延書き込みの関数を追加。set_value_deferred()
、set_exception_deferred()
、notify_deferred()
Utility
boost/next_prior.hpp
をBoost.Iteratorモジュールに移動。ユーザーコードは変更の必要なし
Uuid
- 改善
- GitHub #26
name_generator
をリファクタし、hash provider conceptによるハッシュアルゴリズムの設定変更をできるようにした。オプション機能としてRFC-4122のMD5ハッシュ実装を追加した。この変更によって、将来の標準ハッシュアルゴリズムがサポートしやすくなった - GitHub #34 RFC 4122, Appendix Cの名前空間として
boost::uuids::ns
を追加
- GitHub #26
- バグ修正
- Trac #8630, Trac #11482 Trac #12253
string_generator
が不正なuuidを受け付けてしまっていた問題を修正 - Trac #10665
name_generator::operator()
をドキュメントに合わせてconst
メンバ関数にした - 実証詳細のヘッダファイルをdetailディレクトリに移動した。ユーザーコードの変更は必要ないが、移動前の古いファイルをインクルードしたときに警告は出力される
- Trac #8630, Trac #11482 Trac #12253
Variant
- Trac #6971
apply_visitor()
のvisitables
パラメータ (variant
オブジェクト) を完全転送するよう修正。この機能を実装してくれたLevon Tarakchyan氏に多大なる感謝を
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.0, 4.0.1, 5.0.1
- Clang, C++0x: 3.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1
- 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.1
- Clang, C++17: 5.0.1
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
- GCC, C++0x: 4.4.7
- GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.4.0, 7.1.0, 7.2.0
- GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1
- GCC, C++17: 7.2.0
- Intel: 18.0
- OS X:
- Clang: 9.0.0
- Clang, C++11: 9.0.0
- Clang, C++14: 9.0.0
- Clang, C++1z: 9.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
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
- Android:
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4
- GCC, C++14: 6.2
- FreeBSD:
- Clang: 4.0.0
- Clang, C++11: 4.0.0
- Clang, C++14: 4.0.0
- Clang, C++1z: 4.0.0
- QNX:
- QCC, C++0x: 4.4.2
- QCC, C++11: 4.7.3
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.8.1, 4.0.1, 5.0.1
- Clang, C++0x: 3.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.1
- 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.1
- Clang, C++17: 5.0.1
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.2.0
- GCC, C++0x: 4.4.7
- GCC, C++11: 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0, 7.2.0
- GCC, C++14: 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0, 7.2.1, 8.0.0
- GCC, C++17: 7.2.0
- Intel: 18.0
- OS X:
- Clang: 9.0.0
- Clang, C++11: 9.0.0
- Clang, C++14: 9.0.0
- Clang, C++1z: 9.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, 7.1.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0, 14.1
- Android:
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4
- GCC, C++14: 6.2
- FreeBSD:
- Clang: 4.0.0
- Clang, C++11: 4.0.0
- Clang, C++14: 4.0.0
- Clang, C++1z: 4.0.0
- QNX:
- QCC, C++0x: 4.4.2
- QCC, C++11: 4.7.3