本家リリースノート:
- 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