本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_64_0.qbk
- http://www.boost.org/users/history/version_1_64_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新ライブラリ
- Process
- Klemens D. MorgensternによるProcessライブラリは、以下のようなことをクロスプラットフォームに提供する
- 子プロセスの生成
- 子プロセスのためのストリーム生成
- ストリームを通じての子プロセスとの通信(同期、もしくは非同期に)
- 子プロセスの終了を待機(同期、もしくは非同期に)
- 子プロセスの終了
- 既知の問題
- GitHub #67
group.wait()
が処理を返さない- 訳者註: 実際に問題が発生しているのはWindows環境でのみとされている
- GitHub #67
- Klemens D. MorgensternによるProcessライブラリは、以下のようなことをクロスプラットフォームに提供する
更新ライブラリ
- Any
- Atomic
- Config
- Container
- Context
- Conversion
- Core
- Coroutine2
- DLL
- Geometry
- Hash
- Interprocess
- Intrusive
- LexicalCast
- Fiber
- Math
- Multi-index
- Multiprecision
- Predef
- Program Options
- Regex
- Smart Pointers
- Test
- TypeIndex
- TypeTraits
- Unordered
- Variant
Any
- 一時オブジェクトへの参照をreturnで返す際の、誤った警告を抑制した
- #12615 オブジェクトのアドレスを直接取得する代わりに、
boost::addressof
を使用するようにした - #12053 インクルードするBoostのヘッダファイルは、ダブルクォートで囲むのをやめて山カッコで囲むようにした
- CIのテストで、
address
、leak
、undefined
のサニタイザーを走らせるようにした - テストを追加
Atomic
- GCC 4.7以前の32bit x86コンパイラで正しくない64bitアトミック命令が出力されてしまう問題を修正
Config
- 欠陥検出マクロ
BOOST_NO_CXX11_SFINAE_EXPR
を追加。BOOST_NO_SFINAE_EXPR
は以前からあったが、CXX11
が名前に含まれたマクロがなかった
Container
- バグ修正
- Trac #12749
container::pmr::polymorphic_allocator
のコンパイルエラーを修正 - Trac #11333
boost::container::basic_string
とboost::basic_string_view
を相互運用できるようにした - GitHub #45
emplace_back
は*end()
ではなくback()
を返すべき
- Trac #12749
Context
- 新しいAPIとして
call/cc
を実装した- 訳者註: いわゆるSchemeなどに代表されるCall with Current Continuationのことである
execution-context
が(v1,v2ともに)廃止予定となった- MIPSにおけるスタックポインタの進め幅を修正
- #12719
mingw-w64
でセグメンテーションフォルトする問題を修正 - #12948 Android ARMにおいて
snprintf
が意図しない結果を出していたのを修正- 訳者註:
snprintf
に限らずスタックの開始アドレスが間違っていた
- 訳者註:
- #38 macOSで
context_entry()
がクラッシュする問題を修正 - #39 Clang 3.8でサポートされない
.cpu
ディレクティブがAArch64で使われていたことによってビルド出来なかった問題を修正 - #41
std::invoke
によってstd::bind
が出来なかった- 訳者註: ContextではなくCoroutine2の問題でありCoroutine2を参照されたい
- #46 テストがメンバ名の変更に対応できていなかったのを修正
- #50 ppc64/sysv/elfの組み合わせで出力されるアセンブリが正しくなかったのを修正
Conversion
- ドキュメントをQuickbookに移行した (Mikhail Maksimov氏に感謝)
- テストでのメモリリークを修正 (Mikhail Maksimov氏に感謝)
- CIのテストで、
address
、leak
、undefined
のサニタイザーを走らせるようにした
Core
- C++11の
constexpr
とC++11のSFINAE式を実装したコンパイラにおいて、constexpr
修飾されたaddressof
を実装した (Glen Fernandes氏に感謝) サポートされない場合にはBOOST_CORE_NO_CONSTEXPR_ADDRESSOF
マクロが定義される - コンテナ要素をテストするための
BOOST_TEST_ALL_EQ
マクロとBOOST_TEST_ALL_WITH
マクロをlightweight_test.hpp
に追加した (Bjorn Reese氏に感謝)
Coroutine2
- #4
coroutine2<>
がstd::bind
を受け取れなかった問題を修正
DLL
- Windows CEでのコンパイルエラーを修正
- ポインタからシンボルの位置を取得する
boost:dll::symbol_location_ptr
関数を追加。(たとえばvoid*
からの)間接参照ではシンボル位置を取得できなかった - メンバポインタに対する
detail::aggressive_ptr_cast
の未定義動作を修正 - 実験的なスマートインポートでのリークを修正
- 警告を修正
- CIのテストで、
address
、leak
、undefined
のサニタイザーを走らせるようにした
Geometry
- 改善
- 行列変換のベースを、Boost.uBLASの代わりにBoost.QVMを使用するようにした
- 破壊的変更
ublas_transformer
をmatrix_transformer
に名称変更rtree
のコンストラクタに、明示的な変更器(modifier)としてindex::dynamic_*
パラメータを追加strategy::area::huiller
をstrategy::area::spherical
で置き換えた
- 解決した問題
- GitHub #363
geometry/index/parameters.hpp
でのインクルード漏れを修正 - GitHub #364 異なるpoint型を使用したときに
within(Linear, Areal)
がコンパイルエラーになる問題を修正 - GitHub #370
Buffer
に入力としてRing
を与えたときのセグメンテーションフォルトを修正
- GitHub #363
- 解決したチケット
- Trac #11899
boost::geometry::equals()
が開いたポリゴンを扱えない - Trac #11930
area::huiller
戦略が不正確 - Trac #11931 pole encirclingなポリゴンの球面積が間違っている
- Trac #12410
correct()
に塵座標系のサポートが欠如していた - Trac #12566
pair
の値に生ポインタが含まれている場合にequal_to<>
内でテンプレートのインスタンス化が曖昧になる - Trac #12861 stdlibc++ (gcc 4.8.2)で
rtree
がセグメンテーションフォルトになる - Trac #12885
throw
の代わりにBOOST_THROW_EXCEPTION
を使用する
- Trac #11899
- バグ修正
get_turn_info
内のdistance_measure
を修正
Fiber
(un)bounded_channel<>
を削除- #100 ASIO:
notify
での処理が足りないことで他のファイバーが実行されなくなる問題を修正 - #105 Windows環境下でskynetのパフォーマンステストがクラッシュしていたのを修正
- #106
fixed_stack
アロケータをasync
やpackaged_task
に渡すことが出来なかった問題を修正 - #110 ARMv6でのコンパイルエラーを修正
- #111
buffered_channel::try_value_pop()
の内部で無限ループする問題を修正 - #114
buffered_channel::try_push()
がpop
で待っているファイバーを再開しない問題を修正
Hash
- Visual C++の新しいバージョンで削除された関数オブジェクトを使用するのをやめた。(C++11で非推奨化され、C++17で削除されることになった
std::unary_function
とstd::binary_function
)
Interprocess
- バグ修正
- Trac #12617 OS X 10.11での
clock_gettime
がないというコンパイルエラーを修正 - Trac #12744 Windowsにおいて、
boost::interprocess::ipcdetail::spin_wait
内でwinapi::set_timer_resolution
が使われていたために、おかしな分解能の変換が行われていた。winapi::query_timer_resolution
を使用するよう修正 - GitHub Pull #32
std::pointer_traits
の要件に準拠するよう修正。C++11以降の環境では、offset_ptr<T>::rebind<U>::other
ではなくoffset_ptr<T>::rebind<U>
で型をとれるようにした - GitHub Pull #33 64/32ビットプロセス間の共有において、基本クラスの
offset_ptr
から派生クラスのoffset_ptr
に正しく変換できるようにした - GitHub Pull #34 サンプルコードで
BOOST_MULTI_INDEX_MEMBER
の代わりにmulti_index::member
を使用するようにした - GitHub Pull #35 クロスコンパイルのオプションを修正
- Trac #12617 OS X 10.11での
- Windowsシステムからの新たな実験的オプション
BOOST_INTERPROCESS_BOOTSTAMP_IS_SESSION_MANAGER_BASED
を追加。このオプションは、セッションマネージャに関連付けられたレジストリの値から、共有メモリが置かれるフォルダ名として使用される一意なブートスタンプに由来する。このオプションはVista以降で動作し、デフォルトバージョンはこれ以降の安定バージョンとなるだろう
Intrusive
- バグ修正
- Trac #12745
key_nodeptr_comp
のキー型がvoid*
のときコンパイルエラーになる問題を修正 - Trac #12761
intrusive::set::swap
で(状態を持つ)比較関数が入れ替わらない問題を修正
- Trac #12745
LexicalCast
- #11842 いくつかの警告を修正
- CIのテストで、
address
、leak
、undefined
のサニタイザーを走らせるようにした
Math
- C99にあるすべての関数がAnnex F (IEC 60559) と互換があることを確実にした
- #12066 ベッセル関数I0、I1、K0、K1の精度を改善した
Multi-index
- Trac ##12955 ひとつ以上のranked indexが指定された場合に、あいまいな参照になる関連バグを修正
- メンテナンス上の修正
Multiprecision
- #12527 非正規化数の
cpp_bin_float
をdouble
やfloat
に変換する際に、丸めが二重に行われる問題を修正 - #12559 小さい整数に対する整数平方根のバグを修正
cpp_bin_float
の符号付きゼロの変換を修正- #12527
cpp_bin_float
の丸めコードを修正し、任意の場所で丸められるようにした。それを変換で使用できる - 128ビットのビットスキャン操作のパフォーマンスを改善
- #12580 非常に小さな
cpp_bin_float
の減算を修正 - #12581 C99 Annex F (IEC 60559)互換となるようエラーハンドリングを追加
- #12627
cpp_int
の自明なビット取り出しを修正 - #12625 一貫性のために、
ilogb
(とそれを使用するコード) の引数がゼロのときに指数型の最小値を返すよう修正 __float128
からcpp_bin_float
への変換を許可- #12790 ビットが失われる問題の原因となっていた
cpp_int
の左シフトバグを修正 - #12798 境界はあるが可変精度な
cpp_int
において、過度に積極的なconstexpr
最適化によって起こっていたバグを修正
Predef
- Intel C/C++コンパイラのバージョン仕様を修正
- Boostの有効なバージョン番号から各要素を取り出すためのマクロ
BOOST_VERSION_NUMBER_MAJOR
、BOOST_VERSION_NUMBER_MINOR
、BOOST_VERSION_NUMBER_PATCH
を追加。それぞれ、Boostのメジャーバージョン、マイナーバージョン、パッチバージョンを取得できる - Visual Studioバージョンの番号付けを変更。VS2015以降は、多様なプロダクトバージョンの代わりに、コンパイラバージョンを使用するようにした (https://github.com/boostorg/predef/commit/0d56819d68e7bf5f411cd6240136657ebd47f672)
Program Options
- Trac #7495, GitHub #18 値の
boost::optional
への書き込みをサポートした (Ed Catmur氏に感謝)
Regex
- Oracle C++ toolsetでのコンパイルで、静的リンクすべしという制限をなくした
- #12818 大きな成果として、libFuzzerを使用してライブラリの脆弱性と認定問題(identified issue)を修正した
Smart Pointers
allocate_shared
とmake_shared
の配列版を、より最適でメンテナンスしやすい実装に書き直した (Glen Fernandes氏に感謝)- ポインタをキャストする関数のムーブ版を追加 (Chris Glover氏に感謝)
Test
- Boost Test v3.5
- 詳細はChange logを参照
-
新機能
-
ユーザー定義型をロギングするカスタマイゼーションポイントを提供するようにした。そのためには、型と同じ名前空間で、以下の関数を定義する:
std::ostream& boost_test_print_type(std::ostream& ostr, ArgumentType const& right);
-
JUnitの出力フォーマットが
/log-level/
を持つようにした - JUnitの出力フォーマットは、テストモジュールが多くのチェックを持つ場合、良いパフォーマンスはでません
-
-
バグ修正
- GitHub #107
throw_exception
関数内で使用する例外無効指定の検出をするマクロのtypoを修正 - GitHub #108
runtime_config
の文字列定数の命名規則を、大文字アンダースコア区切りから、小文字アンダースコア区切りに修正 - Trac #11756
<cfenv>
標準ヘッダがない環境で、FE_*
系マクロを使用したコードのコンパイルが通らない問題を修正 - Trac #12540 ユーザー定義型をロギングするカスタマイゼーションポイントを追加
- Trac #12712 同じ名前を持つテストケースで競合が発生していたため、
BOOST_AUTO_TEST_SUITE
でのユニークな名前の生成に、__COUNTER__
を使用するようにした - Trac #12748
VERSION
という名前の変数を定義していたことにより発生していたコンパイルエラーを修正。小文字の変数にした - Trac #12778
nullptr
をサポートした
- GitHub #107
TypeIndex
- GitHub #13
BOOST_TYPE_INDEX_IMPLEMENT_RUNTIME_CAST
マクロを追加。これはruntime_cast
の実装のための機能だが、その目的のために使用していたBOOST_TYPE_INDEX_REGISTER_CLASS
マクロにその機能は含まれていなかった (実装者のChris Glover氏に感謝) - #12739 stl_type_index.hppでの未定義マクロによる警告を修正
- CIのテストで、
address
、leak
、undefined
のサニタイザーを走らせるようにした
TypeTraits
- 新しい型特性、
make_void
を追加- 訳者註: これはC++17で実装される
std::void_t
に相当し、テンプレートエイリアスが実装されたコンパイラではboost::void_t
も提供される。boost::make_void
は可変長テンプレートをサポートしないコンパイラでも提供されるが、その場合は5要素を上限とする
- 訳者註: これはC++17で実装される
Unordered
- C++17のメンバ関数サポートを開始した:
unordered_map
にinsert_or_assign
とtry_emplace
を追加- 全てのコンテナに
merge
とextract
を追加
Variant
- #12508, #12645
recursive_variant_
からvariant
の構築でコンパイルエラーになる問題を修正 (Mikhail Maksimov氏に感謝) - #12236 MSVC 2015 Update 1で可変引数テンプレートを有効にしていない場合にまだ問題があったので修正
- #12680 #7120 GCC6でクラッシュする問題に対してワークアラウンドを入れた (Mikhail Maksimov氏に感謝)
boost::polymorphic_*get
がboost::*get
として動作するよう、ドキュメント化していない境界値テスト(border tests)と固定値テスト(fixed tests)を作った- CIのテストで、
address
、leak
、undefined
のサニタイザーを走らせるようにした
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.0, 3.8.1, 3.9.1
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 3.8.1, 3.9.1
- Clang, C++14: 3.5, 3.6, 3.7.1, 3.8.1, 3.9.1
- Clang, C++1z: 3.9.1
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0
- GCC, C++14: 5.4.1, 6.2.0, 6.3.0
- GCC, C++1z: 6.2.0
- Intel: 16.0, 17.0
- Intel, C++11: 16.0, 17.0
- Intel, C++14: 16.0, 17.0
- OS X:
- Apple Clang: 7.0.2
- Apple Clang, C++11: 7.0.2
- Windows:
- GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0
- GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14, mingw: 4.9.3, 5.1.0, 5.2.0, 5.3.0, 6.1.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android:
- Clang: 3.6, 3.7, 3.8
- GCC: 4.9, 5.4, 6.2
- FreeBSD:
- Clang: 3.8
- Clang, C++11: 3.8
- Clang, C++14: 3.8
- Clang, C++1z: 3.8
- QNX:
- QCC: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.5
- Oracle Solaris Studio, C++11: 12.5
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.8.1, 3.9.1
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.8.1, 3.9.1
- Clang, C++14: 3.4, 3.5, 3.6, 3.7. 3.8, 3.8.1, 3.9.1
- Clang, C++1z: 3.9.1, 4.0
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 6.2.0
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 6.2.0
- GCC, C++14: 5.4.1, 6.2.0, 6.3.0, 7.0.1
- GCC, C++1z: 6.2.0
- Intel: 16.0, 17.0
- Intel, C++11: 16.0, 17.0
- Intel, C++14: 16.0, 17.0
- OS X:
- Apple Clang: 7.0.2
- Windows:
- GCC, C++03, mingw: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.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, 6.2
- FreeBSD:
- Clang, C++98: 3.8
- Clang, C++11: 3.8
- Clang, C++14: 3.8
- Clang, C++1z: 3.8
- QNX:
- QCC: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.5
- Oracle Solaris Studio, C++11: 12.5