本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_65_1.qbk
- http://www.boost.org/users/history/version_1_65_1.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
1.65.1での修正
Config
- CUDAのバージョンマクロを変更
- MSVCの判明している最新バージョンを更新
- MSVC 14.11は構造化束縛をサポート
Context
resume_with
によって実行された関数から継続が返るよう修正
Fiber
resume_with
によって実行された関数から継続が返るよう修正
Smart Pointers
- Visual C++のバージョンチェックを修正
- ホストコンパイラClangによるNVCCでのコンパイルを修正
Stacktrace
- MinGWで空のバックトレースが生成されていた問題を修正
- インストールシステムで動作するように、プリプロセッサファイルの拡張子を変更
_GNU_SOURCE
を定義しないが_Unwind_Backtrace
関数は持っているFreeBSDやその他OSをサポート
Thread
- GitHub #130 Windows環境での
condition_variable
のバグを修正
新ライブラリ
- PolyCollection
- Joaquín M López Muñoz氏による、多相オブジェクトに対して高速に動作するコンテナのライブラリ
- Stacktrace
- Antony Polukhin氏による、バックトレースの収集、コピー、表示をするライブラリ
更新ライブラリ
- Asio
- Context
- Config
- Core
- Coroutine2
- DLL
- Fiber
- Fusion
- Hash
- Geometry
- Log
- Phoenix
- Predef
- Program Options
- Python
- Smart Pointers
- Test
- Thread
- Type Index
- Typeof
- Unordered
- Utility
- Variant
Asio
- Trac #13121 g++ 4.6でのリンクエラーを修正するため、標準アトミックを使用するための要件をg++ 4.7以上とした
- 最近のMSVCのバージョンで、
constexpr
と可変引数テンプレートを有効にした - Linuxのepollバックエンドでの競合状態を修正。これは、epollで別のスレッドがブロックされているときに、ソケットやディスクリプタを閉じたときに発生していた
- 非推奨だった
auto_ptr
の使用をやめた - リアクティブな
async_accept
の実装での、asio_handler_is_continuation
の間違った使用を修正 - Trac #12419 いくつかの現代的なPOSIXプラットフォームで、
sys/poll.h
ではなくpoll.h
を使用するよう変更 - MSVCでのインテリセンス検出を修正
- android/clang/x86ターゲットで、拡張キーワード
__thread
の使用を無効にした
Context
- 改善
- call/ccがucontext-API (swapcontext)をサポート
- call/ccがWindowsのFiber APIをサポート
- call/ccがオンデマンドgrowing stack (セグメント化スタック/分割スタック) をサポート
- バグ修正
- Trac #12719 mingw-w64ツールチェインで、テストケースとサンプルがセグメンテーションフォルトになっていた問題を修正
- GitHub #52 g++-4.9でcallccテストのビルドが失敗する問題を修正
- 重要
- 1.65.1で修正されたバグ: (https://github.com/boostorg/context/commit/420554fe9ac01482990e8ae314f4f7ba81010c9a)
Config
- 欠陥検出マクロとして、以下を追加:
BOOST_NO_CXX11_POINTER_TRAITS
: C++11のstd::pointer_traits
クラスBOOST_NO_CXX17_FOLD_EXPRESSIONS
: C++17の畳み込み式BOOST_NO_CXX17_INLINE_VARIABLES
: C++17のインライン変数BOOST_NO_CXX17_STRUCTURED_BINDINGS
: C++17の構造化束縛
Core
- C++03以降向けに
pointer_traits
を実装した。これには、P0653r0のポインタへの変換関数が含まれる (実装者のGlen Fernandes氏に感謝)。この実装は、Align、Circular Buffer、Fiber、Geometryなどの他のライブラリで使われている - Lightweight testに
BOOST_TEST_GT
(operator>
による比較) とBOOST_TEST_GE
(operator>=
による比較)を追加
Coroutine2
- ucontext-API (swapcontext)をサポート
- WindowsのFiber APIをサポート
- Trac #13064 CoroutineとCoroutine2の異なる振る舞いを修正
DLL
- 非WindowsプラットフォームでのPEのパースを修正
Fiber
- 改善
- ハードウェアトランザクショナルメモリ (Intel TSX) をサポート
- NUMAをサポート
- ucontext-API (swapcontext) をサポート
- WindowsのFiber APIをサポート
- オンデマンドgrowing stackをサポート
- バグ修正
- GitHub #121 GCC 4.8のC++11モードでコンパイルエラーになる問題を修正
- GitHub #123
schedule_from_remote
がアサーション失敗する問題を修正 - GitHub #125 テストでクラッシュする問題を修正
- GitHUb #126 内部で使用しているメモリオーダーが間違っていた
- 重要
- 1.65.1で修正されたバグ: (https://github.com/boostorg/fiber/commit/63f1041f0e484e64dec437a0fa780ea2463abda2)
Fusion
- Trac #12986 MSVC 14.1は未対応となっていた次の可変長テンプレートベースのコンテナをサポートした:
fusion::vector
,fusion::deque
,fusion::map
,fusion::set
, およびfusion::tuple
Hash
- C++11標準の
char16_t
、char32_t
、std::u16string
、std::u32string
をサポート
Geometry
- 改善
correct()
の、area strategyをとるオーバーロードを追加is_convex()
の、side strategyをとるオーバーロードを追加- MultiPoint/AnyGeometryのために、不足していた関係操作 (
covered_by
,crosses
,equals
など) を追加
- 解決した問題
- Trac #12410
correct()
に地理 (geographic) 座標系が不足していた - Trac #13035 segments near polesに対する非デカルト交差戦略が間違った結果となっていた
- Trac #13057 boxに対する
disjoint()
の数値的な問題によって、linestringのintersects()
が間違った結果となっていた
- Trac #12410
- バグ修正
is_valid
が、interior ringが他のinterior ringに接触 (touch) するmultipolygonに対してfalse
を返す可能性があった問題を修正is_valid
が、polygonがinterior ring内に配置され、他の全てと接触しているmultipolygonに対してfalse
を返す可能性があった問題を修正union_
が不正な結果を生成する可能性があった問題を修正 (場合によってはBOOST_GEOMETRY_INCLUDE_SELF_TURNS
をdefineする必要がある)intersection
(と同種の機能) を修正。しかし、いくつかの状況でまだ不正となるdifference
(と同種の機能) を修正。しかし、いくつかの状況でまだ不正となる- intersection strategyからさまざまなアルゴリズム内部へのarea strategyの伝播を修正
relate
での未初期化変数と、overlay
での一時オブジェクトへの参照を修正- geographic Segment/Boxでの
disjoint
のエラーを修正 - さまざまなアルゴリズムでの非デカルトGeometryのハンドリングを修正
Log
- Solaris互換を改善。異なるプラットフォームを統一的に扱うビルドスクリプトを更新した
Phoenix
- GitHub #50 幾つかのドキュメントを修正
- Trac #7423 C++11以降かつ連想コンテナで
phoenix::erase
を使用した際にイテレータを返すように変更 - GitHub #52
std::set
およびstd::multiset
はphoenixが提供する遅延関数で動作するようになった - GitHub #53 C++17以降では
phoenix::random_shuffle
を無効化した - Trac #11875 前方宣言ではなく適切なヘッダをインクルードするようにした
Predef
- Intel C/C++コンパイラの値が9999だった場合に、コンパイラバージョン12.1.0となるよう修正
-
ワークアラウンド検出のために、
BOOST_PREDEF_WORKAROUND
マクロとBOOST_PREDEF_TESTED_AT
マクロを追加
// #define BOOST_PREDEF_WORKAROUND(symbol,comp,major,minor,patch) #if BOOST_PREDEF_WORKAROUND(BOOST_COMP_CLANG,<,3,0,0) // Clangコンパイラの古いバージョン向けのワークアラウンドをここに書く #endif
// BOOST_PREDEF_TESTED_AT(symbol,major,minor,patch) #if BOOST_PREDEF_TESTED_AT(BOOST_COMP_CLANG,3,5,0) // Clang 3.5.0以上での検証をここに書く #endif
-
ARM64 MSVC SIMDの検出を追加 (Minmin Gong氏に感謝)
- iOSシミュレータとデバイスの検出を、プラットフォーム選択として追加 (Ruslan Baratov氏に感謝)
- MinGWでのインクルードガードが間違っていた問題を修正 (Ruslan Baratov氏に感謝)
Program Options
- Trac #7495, GitHub #18
boost::optional
に値を保存できるようにした (Ed Catmur氏に感謝) - GitHub #25 値なしでオプションを指定した場合のデフォルト値であるimplicit valueの解析において、次のトークンから値を使用できるようにした。1.59.0以降で、
--option_name option_value
構文でのimplicit valueが許可されなくなり、--option_name=option_value
の構文を使用する必要があった。これによって--option_name option_value
構文の意味が変わってしまっていたために、以前の状態に戻し、両方の構文を許可するようにした
Python
boost::python::str
のeval()
、exec()
、exec_statement()
関数の引数としてconst char*
をとれるようにした- 廃止していた
boost::python::numeric
のAPIを削除した。代わりにboost::python::numpy
を使用すること - MSVCとPython3でのビルド問題をいくつか修正
Smart Pointers
- 新たなクラステンプレート
atomic_shared_ptr
を追加。これは、shared_ptr
上にスレッドセーフなアトミックポインタ操作を提供する (作者Peter Dimov) - 新たなクラステンプレート
local_shared_ptr
を追加。これは、非アトミック操作によって参照カウントを更新する (作者Peter Dimov) allocate_shared()
とmake_shared()
の配列版を、さらに最適化 (作者Glen Fernandes)- ドキュメントをAsciidocフォーマットで書き直した
Test
- Boost Test v3.6
- 詳細はChange logを参照
- 新機能
- C++17互換にした (VS2017でテストした) (Daniela Engert氏に感謝)
BOOST_TEST
マクロで、C配列を直接比較できるようにした- より良いグローバルフィクスチャの仕組みとして、
BOOST_TEST_GLOBAL_FIXTURE
マクロを追加。グローバル初期化のためにBOOST_TEST_GLOBAL_CONFIGURATION
マクロを追加し、従来のBOOST_GLOBAL_FIXTURE
を非推奨化。 - フィクスチャのサポートを改善。
setup()
/teardown()
メンバ関数について、teadown時間のチェックをより良いものにした
- 破壊的変更
- Trac #12631 いくつかのAPIをロガーのためにインタフェースを変更した
- 従来の
BOOST_GLOBAL_FIXTURE
を非推奨化し、BOOST_TEST_GLOBAL_FIXTURE
とBOOST_TEST_GLOBAL_CONFIGURATION
に分割した
- バグ修正
- Trac #5282 テストフィクスチャが仮想継承をサポートしていないという問題。対応なし
- Trac #5563
BOOST_GLOBAL_FIXTURE
マクロで、デストラクタでテストに失敗するとクラッシュする問題を修正 - Trac #11471 C配列を扱えない問題を修正
- Trac #11962 フィクスチャのコンストラクタで
BOOST_TEST_MESSAGE
マクロを使用すると、不正なXMLが出力される問題を修正 - Trac #12228 いくつかのヘッダがコンパイルエラーになる問題を修正
- Trac #12631
BOOST_DATA_TEST_CASE
でBOOST_TEST_MESSAGE
マクロを使用すると、不正な出力になる問題を修正 - Trac #13011
BOOST_TEST
マクロの浮動小数点数の比較が壊れていた問題を修正 - GitHub #106 非推奨になっていたC++標準ライブラリの関数を置き換えた
Thread
- 1.65.1で修正されたWindows環境の重要なバグ
- GitHub #130 Windowsの
condition_variable
に同期問題が起きていた
- GitHub #130 Windowsの
- バグ修正
- Trac #6787 システム時刻をロールバックすると
boost::this_thread::sleep()
がハングしていた問題を修正 - Trac #12519
boost::thread::try_join_for()
がタイムアウト後にreturnしなかった問題を修正 - Trac #12874
future<>
の拡張コンストラクタはBOOST_THREAD_PROVIDES_FUTURE_UNWRAP
以下でなければならなかった - Trac #12888 mingw/gcc 4.4環境で、このライブラリがリンクできなかった
- Trac #12958
sync_bounded_queue::wait_pull_front( lve )
が例外を投げる可能性があった - Trac #13077 スタティックな
libboost_thread
のリンクが、DLL初期化で失敗となっていた - Trac #13155 Solaris 11.3とOracle Linux (6と7)のpthreadシステム上でビルドに失敗していた問題を修正
- GitHub #121 VS2017環境で
on_tls_prepare
が壊れていた
- Trac #6787 システム時刻をロールバックすると
Type Index
- Trac #13009
<boost/functional/hash.hpp>
のインクルードが抜けていたところを修正 (Ed Catmur氏に感謝) - Trac #13027 C++11をサポートしているコンパイラでは、
hash_code()
の計算にstd::type_info::hash_code()
を使用するようにした - GitHub #16 GCC 7以降での
ctti_type_index
を修正 (Benjamin Buch氏に感謝)
Tyepof
- Track #11821 clang-clでのコンパイルエラーを修正
Unordered
unordered_set
、unordered_multiset
、unordered_map
、unordered_multimap
で同じデータ構造を使用するようにした。これはC++17において、マージ(merge)と抽出(extract)操作のノードがコンテナ間で互換である必要があったため- 非推奨だった関数にdeprecated属性を追加
- C++11コンパイラに対して、
pair
のpiecewise構築においてallocator_traits
、construct
、destroy
の使用を改善し、ふさわしい動作にした - 新しいOracleコンパイラに対して、ワークアラウンドを減らした
- GitHub #5 未初期化メモリへのポインタ間接参照を回避
Utility
- Trac #10847, Trac #13002 Boost 1.57.0から
boost::next()
とboost::prior()
がSFINAEフレンドリーでなくなっていた。互換性のために元に戻した
Variant
- Trac #13018
boost::get()
に右辺値参照版を追加 - Trac #13037
<boost/variant/polymorphic_get.hpp>
にインクルードが不足していた (Adam Badura氏に感謝) - Trac #8554, Trac #10041, GitHub #35
boost::make_variant_over
を修正し、viewや他のForward Sequenceに対して動作するようになった (Mikhail Maksimov氏に感謝)
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.0, 4.0.1, 5.0.0
- Clang, C++11: 3.0, 3.1, 3.2, 3.3, 3.4, 4.0.1, 5.0.0
- Clang, C++14: 3.5.0, 3.6.0, 3.7.1, 3.8.0, 3.9.1, 4.0.0, 5.0.0
- Clang, C++17: 5.0.0
- Clang, C++1z: 4.0.0
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.2, 5.4.0, 7.1.0
- GCC, C++11: 4.4.7, 4.7.2, 4.7.3, 4.8.5, 4.9.4, 5.4.0, 6.4.0, 7.1.0
- GCC, C++14: 5.4.0, 5.4.1, 6.3.0, 6.4.0, 7.1.0, 7.2.0
- GCC, C++17: 7.1.0
- GCC, C++1z: 6.3.0
- Intel: 17.0
- OS X:
- Clang: 8.1.0
- Clang, C++11: 8.1.0
- Clang, C++14: 8.1.0
- Clang, C++1z: 8.1.0
- Windows:
- GCC: 3.4.5, 4.1.2, 4.2.4, 4.3.3, 4.4.0, 4.5.4
- GCC, C++11: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14: 4.9.3, 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: 3.8.0
- Clang, C++11: 3.8.0
- Clang, C++14: 3.8.0
- Clang, C++1z: 3.8.0
- QNX:
- QCC, C++11: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.5_next, 12.5
- Oracle Solaris Studio, C++11: , 12.5_next, 12.5