本家リリースノート:https://github.com/boostorg/website/blob/master/feed/history/boost_1_56_0.qbk
モジュール化
Boostのバージョン管理を、Subversionから、Gitのサブモジュールを使用するシステムに移行した。ディレクトリの構成が、以前と少し異なる。
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
新モジュール
以下のモジュールは、既存のコードから抽出されたもの。ヘッダのパスは今までと同じ。
- Assert
- カスタマイズ可能なassertマクロ。Peter Dimovによってメンテナンスされる。
- Core
- 他のライブラリから使用される、最小の依存関係を持つコアユーティリティ。Peter Dimov、Glen Fernandes、Andrey Semashevによってメンテナンスされる。
- Lexical_Cast
- Kevlin Henney氏による、テキストと整数間の汎用的な変換。
- Throw_Exception
- Emil Dotchevski氏による、Boostから例外を送出するための一般的なインフラストラクチャ。
- WinApi
- Boost内部で使用する、
<windows.h>
を必要としない宣言。
- Boost内部で使用する、
新ライブラリ
- Align
- Glen Fernandes氏による、メモリアラインメントの関数、アロケータ、アダプタ。
- Type_Index
- Antony Polukhin氏による、実行時とコンパイル時両方で使用できる、コピー可能なtype info。
更新ライブラリ
- Accumulators
- Any
- Asio
- Assign
- Atomic
- Circular Buffer
- Concept Check
- Container
- Context
- Coroutine
- Chrono
- Dynamic Bitset
- Flyweight
- Fusion
- Geometry
- Hash
- Interprocess
- Intrusive
- Lexical Cast
- Log
- Math
- Move
- MPL
- Multi Array
- Multi-Index
- Multiprecision
- Odeint
- Optional
- Preprocessor
- Program Options
- Regex
- Smart Pointers
- Thread
- TTI
- Unordered
- Utility
- UUID
- Predef
- Variant
非推奨ライブラリ
- TR1
Accumulators
- 新たなアキュムレータとして、
rolling_variance
とrolling_moment
を追加
Any
Asio
- Boost.Coroutineの新しいインタフェースで
boost::asio::spawn()
が動かなかった問題を修正(#9442, #9928) io_service
のデストラクタによるクリーンナップ処理が走ったとき、boost::asio::spawn()
のコルーチンが正しくアンワインド(スタック巻き戻しによるスタック内のデストラクタ呼び出し)されない問題を修正(#9731)io_service::wrap()
とstrand::wrap()
によって生成されるハンドラのための継続フックの移譲を修正(#9741)- 接続志向IPソケットのために、WindowsのI/O完了ポートバックエンドに、使用可能なら
ConnectEx()
関数を使用するようにした。 - 非Windows(および非IOCP Windows)環境において、
io_service
のインスタンスひとつに付き、ひとつの条件変数を使用するよう変更した。これによって、run_one()
が複数スレッドから呼ばれる際の、潜在的な競合状態を解決した。 boost::chrono
とstd::chrono
のクロックをベースにしてタイムアウト時間を計算する際の整数オーバーフローを修正(#9662, #9778)- kqueueバックエンドの
EV_CLEAR
ハンドリングに、さらに変更を加えた。Mac OS Xのclose()
システムコールがハングするケースがあったため。 resolver_query_base::flags::operator~
の実装で無限再帰が起こっていたので修正(#9548)- 膨大な数のソケットを使うWindows上で
select
リアクタがより効率的に動作するようにした(#9528) - WindowsのGCCで起きるtype aliasingの問題を修正(#9550)
- アドレスサニタイザーの警告を回避するために、バッファのテストをコンパイル時のみ走らせるようにした(#8295)
- 最近のWindowsバージョンで、
GetQueuedCompletionStatus()
のタイムアウトワークアラウンドを無効にした(commit 9d13af4) - リンクローカルなマルチキャストアドレスを使用する際の、文字列ベースのスコープIDをサポートした
- IPv6マルチキャストグループのジョインに、明示的に指定されなければアドレスのスコープIDを使用するよう変更した
- リンクローカルなマルチキャストアドレスのテストがMac OS XとBSD環境で失敗していたので修正
- GCCで無名enumを使用すると発生する問題のワークアラウンドを追加(#10042)
- Windowsの
HANDLE
バックエンドを、ERROR_MORE_DATA
を無視するよう巻き戻した。代わりに、他のもの(error_code
を使うか、system_error
例外の送出)を使ってエラーを伝搬するようにし、転送されたバイト数が返るようにした。部分的なメッセージを処理する必要がある場合は、error_code
のオーバーロードを使用すること(#10034) signal_set
の実装に含まれるシグナル番号チェックでの、off-by-oneエラーを修正(#9324)- Crayコンパイラで動くように、SSE2を組み込み関数ではなくインラインアセンブラを使用するようにした
- 最新のVisual C++とWindows SDKで非推奨マークが付いているWinsockの機能を使用停止(commit cc9730e)
- AIXのGCCで単体テストを通すためのワークアラウンドを追加
- 多くのドキュメントの細かい部分を修正(#8295, #9605, #9771)
Assign
- C++11での曖昧さを解決(#3073)
Atomic
- ライブラリを再設計した。内部的なリファクタリングのほか、さまざまなバグの修正、機能テストマクロの不適切な値やオーバーフローハンドリングの割り込みといったことも含む。
memory_order
列挙型の値を変更した。列挙型の値はインタフェースの一部ではないが、ユーザーのインタフェースとして使用する場合、ABIが壊れる可能性がある。- MSVCのWindows x64向けに、128ビットのアトミック操作を実装した。ターゲットCPUにcmpxchg16b命令が存在していることを想定している。初期のいくつかのAMD CPUはこの命令をサポートしていない。そのようなターゲットのためには、
BOOST_ATOMIC_NO_CMPXCHG16B
マクロを定義する。 - 実験的に、MSVCのWindows ARMターゲットのサポートを実装した。
- 実験的に、GCCのDEC Alphaターゲットのサポートを実装した。
- GCCのARMv6とそれ以降のサポートを改善した。全てのアトミック操作を、CASベースのループの代わりに、アセンブラブロックで実装した。ARMv7で64ビット操作をサポートした。
BOOST_ATOMIC_FLAG_INIT
マクロとatomic_flag
の初期化の、オプショナルなサポートを実装した(#8158)。constexpr
デフォルトコンストラクタによる初期化に依存する。以下の記事を参照:- Constant Initialization - 雑貨’s tumblr
- SPARCv9ターゲットのコンパイルを修正した(#9446)。
- PowerPCターゲットのコンパイルを修正した(#9447)。
- x86とx86-64に対するClangでのいくつかの互換性問題を修正した(#9610、#9842)
- WindowsのIA64プラットフォームに特化したコードを削除した。
Circular Buffer
- C++11のアロケータモデルをサポート(#9970)
- 古いコンパイラのサポートを終了
Concept Check
バグ修正
- いくつかの警告を修正(#5012)
Container
新機能
- DLMallocベースの拡張アロケータを追加
- 参照:「Boost.Containerにrealloc相当の機能が入る予定」
boost::container::allocator<T, 2>
を使用することで(2はバージョン)、vector
の内部実装にrealloc()
相当の機能が使われるようになる。boost::container::node_allocator
を追加。これは、シンプルな分離ストレージのアロケータ。明示的に要求しない限り、システムにメモリを返さない、Boost.Poolと同じようなアプローチをとっている。boost::container::adaptive_pool
を追加。これは、node_allocator
が低コストでシステムにメモリを返せるようにするためのもの。- これらの機能を使うには、Boost.Containerのビルドが必要。
- ツリーベースの順序付き連想コンテナのカスタマイズ性を改善した。
(multi)map
および(multi)set
の実装に、AVL tree、Scapegoat tree、Splay treeを使用できるようにした。
バグ修正
- VS2005でcontainer/memory_util.hppをインクルードしたあとに
swap()
を使うとコンパイルエラーになる問題を修正(#9338) vector::resize()
のパフォーマンス問題を解決(#9637)string
の構築を最適化(#9648)stable_vector
のイテレータからiterator_range
を作れない問題を修正(#9801)vector::resize(size, default_init)
のドキュメントでvalue initializedされると書かれていたので、default initializedに修正(#9915)- ほとんどのコンテナの代入演算子で、アロケータの伝搬が間違っていたのを修正(#9916)
flat_map::insert(ordered_unique_range_t...)
にmove_iterator
を渡せない問題を修正(#9931)vector
の中で、重複メモリ範囲でmemcpy()
を行っていた問題を修正(#9955)
Context
- 破壊的変更:
fcontext_t
型を、構造体から、void*
の別名に変更fcontext_t
型に関連するmake_fcontext()
関数のシグニチャの一部が、fcontext_t*
からfcontext_t
に変わる。
- Linux環境において、コンテキストに使用するスタックがexecutable stackではないことを示すマーカーを付けた。これにより、executable stackを作る権限が必要なくなる。(#8826)
- iOSとWindows 8環境において、Boost.Contextの例外を捕捉できない問題を修正(#9437)
- x32 ABIをサポート(#9445)
- powerpc_64leをサポート(#9522)
- powerpc_64 le/beの、エンディアン周りのバグを修正(#9743)
- Mac OS X + clangに対するx86のバグ修正(#9774)
Coroutine
新機能
symmetric_coroutine
をサポート。- Boost.Coroutineがサポートするアーキテクチャのリストを、ドキュメントに記載した(#9551)
バグ修正
- 複数スレッドで
pull_coroutine
を使用する際に発生する、protected_stack_allocator
での競合状態を修正(#9355) - POSIX実装のstack_allocator内で
mmap
のエラーチェックをしていなかったので修正(#9734) mmap
後にmemset
で0を埋める必要はなかったので削除(#9735)- coroutineのイテレータが
const
修飾版のoperator==
を持っていなかったので追加(#9760) mmap()
の戻り値を修正(#10070)protected_stack_allocator
でファイル記述子は必要なかったので修正(#10157)
Chrono
- HP ux上で、
pthread_getcpuclockid()
が定義されていないために、コンパイルエラーになる問題を修正(#6918) - Windowsで起動時に
steady_clock::now()
を呼ぶと、アサーション失敗になる問題を修正(#8006) chrono::process_cpu_clock
のtime pointでの1000の係数が、Linux上で間違っていた問題を修正(#9337)process_cpu_clock::time_point
の出力フォーマットが{real;user;system}の3つになっているはずが、V2ではrealのみが出力されていたので修正(#9342)boost::chrono::floor()
/round()
に負のdurationを渡した結果が間違っていた問題を修正(#9419)thread_clock
がMac OS X向けに定義されていなかった問題を修正(#9698)boost::this_thread::sleep_for()
が、Win32上でときどき、すぐに返ってしまう問題を修正(#9720)- gcc-mingwは多くの問題があったため、Boost.Buildから削除された。代わりに
<toolset>gcc,<target-os>windows
を使うよう修正した(#9859) - Solaris上で
timegm()
関数が定義されていないためにコンパイルエラーをが起こっていた問題を修正(#9918) std::numeric_limits
の静的メンバ関数がconstexpr
実装になっていなかった場合にコンパイルエラーが起こっていた問題を修正(#9811)process_cpu_clocks
が32ビット環境でオーバーフローする問題を修正(#10069)- QNX上で
timegm()
関数が定義されていないためにコンパイルエラーが起こっていた問題を修正(#10151)
Dynamic Bitset
- ムーブコンストラクタのサポートを追加
- MSVC2013の警告を修正
- C++11の最小アロケータ要件をサポート
noexcept
仕様に対応
Flyweight
- 可変引数テンプレートを使用した、
flyweight<T>
でT::T()
への完全転送をサポートした。(以前まではエミュレーションをしていた) std::initializer_list
を受け取るコンストラクタと代入演算子をサポート。元となる型T
のコンストラクタ引数として使用する。- DLLモジュール間の静的初期化で発生する問題を修正(#9553)
- メンテナンス関係の細かい修正
Fusion
- FusionをGPUで使用可能にした
Geometry
新機能
- 新たなアルゴリズム
buffer()
を追加。これは、ジオメトリの膨張/収縮(inflating/deflating)を行う。(buffer()
アルゴリズム自体は以前からあったが、Boxを大きくするのみだった。) - 新たなアルゴリズム
remove_spikes()
を追加。これは、Ring、Polygon、もしくはMulti Polygonからスパイクを削除するアルゴリズム。 - 新たなアルゴリズム
point_on_surface()
を追加。このアルゴリズムは、Polygonのサーフェイス(インテリア)上のPointを生成する。 - 新たなアルゴリズム
is_simple()
を追加。このアルゴリズムは、ジオメトリがOGC標準に従ってシンプルならtrue
を返す。 - 新たなアルゴリズム
is_valid()
を追加。このアルゴリズムは、ジオメトリがOGC標準に従って適格ならtrue
を返す。 - 新たなアルゴリズム
crosses()
を追加。このアルゴリズムは、OGC標準に従って空間的関係をチェックする。 - 集合演算アルゴリズム(
difference()
,intersection()
,sym_difference()
,union_()
)に対して、入力としてPointと見なせる型の組、および線形ジオメトリをサポートした。 distance()
アルゴリズムとcomparable_distance()
アルゴリズムを、全てのジオメトリの組み合わせに対応した。- 空間関係のアルゴリズム(
covered_by()
,touches()
,within()
, etc...)に、線形ジオメトリと面積ジオメトリのサポートを追加。 - 様々なアルゴリズムの入力ジオメトリとして、
boost::variant
をサポート。 rtree
に、インデックス付きセグメントのサポートを追加。rtree
のnearest()
に、述語のサポートを追加。
解決したチケット
- 重なっているポリゴンに対する多くのアルゴリズムの結果がおかしくなる問題を、
disjoint()
の実装にpoint_on_surface()
を使用することで解決した(#8310) - 自己交差がないポリゴンから自己交差が作られてしまう問題を修正(#9081)
- make_qbk.pyの実行がエラーになってドキュメント生成に失敗する問題を修正(#9245)
(sym_)difference()
が成功しない問題を、堅牢な型への再スケーリングによって修正(#9563)- ほぼ水平のSegmentに対してwinding戦略を付けた
within()
の実行結果がおかしい問題を修正(#9628) - スパイクのみのポリゴンの、スパイクを削除するようにした(#9871)
- WKTのドキュメントがなかったので追加(#9947)
- LinestringとBoxに対するdifferenceがintersectionを返す問題を修正(#10019)
- boost/geometry/arithmetic.hppのコンセプトチェックがおかしかったので修正(#10077)
バグ修正
intersects(polygon)
が自己交差のPointを返していたので修正equals()
が、OGC標準の非シンプルなジオメトリに対して不正な結果を返していたので修正touches()
が、CCW面積ジオメトリに対して正しく動作していなかったので修正rtree
のnearestクエリが、非デカルト(cartesian)座標系において間違った結果を返していたので修正rtree
にInterprocessのアロケータを使うと、いくつかのケースでクラッシュしていたので修正
Hash
- Visual C++ 6.0向けのワークアラウンドをいくつか削除
hash_combine()
の継続的な改善。これは、以前からドキュメント化されていたアルゴリズムの変更。
Interprocess
- バグ修正
- Linux上で
message_queue
がデッドロックする問題を修正(#Trac #9221) - いくつかのコンピュータではCommon AppDataのレジストリが空であるため、Interprocessが動かない問題を修正(Trac #9226)
WaitForSingleObject(mutex)
を呼び出しているところで、WAIT_ABANDONED
をハンドリングするよう修正(Trac #9284)CreateMutex()
を呼び出しているところで、失敗値をwinapi::invalid_handle_value(-1)
と比較していたが、実際の失敗値はNULL
なので、比較する値を修正(Trac #9285)timed_wait
が寿命切れをチェックしていなかったので修正(Trac #9288)- AndroidはXSI共有メモリオブジェクトをサポートしていないので、ワークアラウンドを修正(Trac #9408)
managed_external_buffer
オブジェクトの構築でクラッシュする問題を修正(Trac #9729)- Windowsでイベントログが破損しているとbooststampの生成に失敗する問題を修正(Trac #9767)
- Android NDK GCC 4.8でコンパイルに失敗する問題を修正(Trac #9835)
- Windowsで共有フォルダが使用可能でない場合に、
get_tmp_base_dir()
が失敗する問題を修正(Trac #9911) init_atomic_func()
とfini_atomic_func()
での、変数の未初期化警告を修正(Trac #9946)segment_manager::find(unique_instance_t*)
がコンパイルに失敗する問題を修正(Trac #10011)- Cray C++ Compilerのサポートを追加(GitHub #2)
- MinGW環境のために、
interprocess_exception
例外を送出する部分を修正。エラー内容の取得とthrowを同一行に書くと、GetLastError()
がリセットされてしまうため、2行に分離した(GitHub #3)
- Linux上で
- ABI破壊
message_queue
に、BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
オプションを追加した(Trac #9221) try_lock()
の(timed_)lock
コードをリファクタリングし、統一化した。condition_variable
のデストラクタの挙動として、POSIXのセマンティクスを許可。BOOST_INTERPROCESS_SHARED_DIR_PATH
オプションを追加。これは、共有メモリオブジェクトの実装としてメモリマップドファイルが使われた場合に、使用する共有ディレクトリの場所を指定するためのもの。- 他のライブラリと同じように、
BOOST_USE_WINDOWS_H
をサポートした。これが定義されている場合、<windows.h>
や他のWindows SDKの構造体を使用し、そうでなければ、重いヘッダーの負担を軽減する構造体を定義して使用する。(Trac #10021) windows_shared_memory
にget_size()
メンバ関数を追加した(Trac #10021)
Intrusive
- Doxygenによって生成されるリファレンスを改善し、先行宣言のヘッダーを修正、更新した。
- ABI破壊 1.55.0で導入したABIレギュレッションを修正した。主にMSVCコンパイラ周りで。
- 破壊的変更 以前から非推奨としていた機能を削除した。
splay
コンテナからxxx_dont_splay()
関数を削除splay
コンテナからsplay_set_base_hook
とsplay_set_member_hook
を削除splaytree_algorithms
の関数の追加パラメータ「bool splay = true
」を削除
- バグ修正
- Visual Studio 2010/2012で
has_member_function_callable_with_construct_impl
がコンパイルエラーになっていたので修正(#8468, #9332) list_impl::iterator_to()
メンバ関数内で使用するvalue_traits
を、ステートフルにした(#9650)- 最近のSun CC CompilerでIntrusiveのコンパイルができなくなっていたので修正(#9736)
- safe_link(or auto_unlink)を付けたintrusive listが、解放後のメモリを操作していた問題を修正(#9940, #9949)
const_cast
の使用をやめた(#9948)- デフォルトフックから派生しない場合の、侵入フックのテストを追加(#9961)
- Visual Studio 2010/2012で
- ツリーの再バランスコードの冗長な代入を回避して、最適化した
- 64ビット環境の
suggested_upper_bucket_count()
とsuggested_lower_bucket_count()
用に、64ビットの素数値を追加(#8468) - 古いSun CC Compilerのworkaroundを削除。
Lexical Cast
try_lexical_convert()
関数を追加。この関数は変換失敗時にfalse
を返し、出力パラメータの型にDefault Constructibleを要求しない(#6700)- 先頭が0の文字列を
bool
に変換する処理を修正(#9659)- Boost 1.47.0まで
boost::lexical_cast<bool>("00")
は成功しfalse
を返していたが、それ以降でbad_lexical_cast
例外を送出していた。
- Boost 1.47.0まで
- より小さなバイナリを生成し、コンパイラの作業をよりシンプルにする変更を行った(#9046)
- このライブラリを、Boost Conversion Libraryから分離した。
- 警告を修正(#8991)
Log
全体的な変更:
- Windowsターゲットにおいて、このライブラリはデフォルトでWindows XP向けにコンパイルするようにした。
record
とrecord_view
の添字演算子にattribute_name
引数を追加。basic_formatting_ostream
で、一時オブジェクトを出力できるようにした(#9389)- フォーマット文字列に、名前付きスコープの関数名とソースファイル名を入れられるようにした(#9263)
- named scope formatterに、不完全および空のmarkerのサポートを追加した(#9123)
- 不完全な名前付きスコープリストのデフォルトの出力フォーマットを変更した:末尾のスコープ区切り文字を省略するようにした。
std::regex
のサポートを追加。- Boost.Logのデフォルトで、Boost.Regexを内部的な正規表現に使用するようにした。この正規表現バックエンドは、マクロで変更できる。
バグ修正:
- AVX2を有効にしたCPU(たとえばIntelのHaswell)での
dump
マニピュレータを修正 - ロガークラスの
get_attribute()
メンバ関数のコンパイルエラーを修正 - 同期/非同期sinkフロントエンドの
locked_backend()
関数の実装で発生していたデータ競合を修正 block_on_overflow
戦略を使用した非同期sinkのenqueue()
メンバ関数での、ロギングスレッドの無限ブロックを修正より詳細な変更は、ChangeLogを参照:
http://www.boost.org/doc/libs/release/libs/log/doc/html/log/changelog.html
Math
- 破壊的変更 メンテナンス用の機能を、libs/math/include_privateディレクトリ以下に移動した。影響を受けるヘッダは以下:
- boost/math/tools/test_data.hpp
- boost/math/tools/remez.hpp
- boost/math/constants/generate.hpp
- boost/math/tools/solve.hpp
- boost/math/tools/test.hpp
- もしこれらの機能を引き続き使いたい場合は、libs/math/include_privateディレクトリへのパスを通せばよい。
- 破壊的変更 分布関数と特殊関数が、overflow errorを吐き出す変わりに、正の無限大の値を返すよう修正し、ドキュメントに挙動を明記した。これまでoverflow errorが発生したときのデフォルトの動作は
std::overflow_error
例外の送出だったが、例外を送出するかしないかは、関数ごとに違っていた(#10111)。- 影響がある特殊関数は以下:
gamma_p_inva()
gamma_q_inva()
ibeta_inva()
ibetac_inva()
ibeta_invb()
ibetac_invb()
gamma_p_inv()
gamma_q_inv()
- 影響がある分布関数は以下:
pareto_distribution
beta_distribution
geometric_distribution
negative_binomial_distribution
binomial_distribution
chi_squared_distribution
gamma_distribution
inverse_chi_squared_distribution
inverse_gamma_distribution
- 影響がある特殊関数は以下:
round()
とtrunc()
の引数として、整数を受け取れるようにした(#10066)- 0階導関数(zero derivative)をハンドリングするよう、Halleyのイテレーションを修正(#10046)
- geometric distribution (幾何分布)の内部処理で、渡されたポリシーを使っていない箇所があったので修正(#9833)
- negative binomial distribution (負の二項分布)のコーナーケースを修正(#9834)
- Mac OSでのコンパイルエラーを修正
- スターリングの近似を使うために、
tgamma
とlgamma
の精度を任意に変更できるbernoulli_numbers
を追加(Nikhar Agrawal氏作) - ベッセル関数の最初の導関数を追加(Anton Bikineev氏作):
cyl_bessel_j_prime
cyl_neumann_prime
cyl_bessel_i_prime
cyl_bessel_k_prime
sph_bessel_prime
sph_neumann_prime
- Studentのt分布のサンプルコードにあったバグを修正。sample meanの透過性テストも一緒に修正。
- より良いルート探索コードに使えるmax_iterパラメータをドキュメントに記載した(#9225)
__float128
型の定数を有効/無効にするオプションを追加(#9240)- ベッセルのI0とI1における、負数のハンドリングを整理した(それと、もう使っていないコードを削除した)。(#9512)
tgamma
とlgamma
に非常に小さい値が渡された場合でもハンドリングできるよう修正した。これらはspuriousオーバーフローを生成しないようになった。(Rocco Romeoに感謝)- 「#9672 Laplace distribution(ラプラス分布)のPDFとCDFがdomain error例外を送出する」ランダムな変量(variate)を無限にした。
rising_factorial
、falling_factorial
、tgamma_delta_ratio
にあったいくつかのコーナーケースを修正した。Rocco Romeoに感謝。- 使っていなかった定数
pow23_four_minus_pi
を削除
Move
BOOST_MOVE_RET
マクロを追加- バグ修正
MPL
boost::mpl::for_each
を、GPUで使用可能にした
Multi Array
operator()
がCollectionコンセプトをチェックしているが、実際にはRandomAccessCollectionを要求していた問題を修正(#5664)- Visual C++ 2010デバッグモードでのコンパイルエラーを修正(#4874)
fortran_storage_ordering
のサンプルコードが間違っていたので修正(#3581)- コンセプトが
detail
名前空間に置かれていたので、detail
の外に出した(#4032) - C++標準文書へのリンクが壊れていたので修正(#9212)
- GCCの-Wundefオプションで発生する
BOOST_MULTI_ARRAY_NO_GENERATORS
関係の警告を修正(#8368)
Multi-Index
- erase(iterator)のオーバーロードが、次を指すイテレータを返す必要があるためにパフォーマンスが遅かった(#4264を参照)。LWG issue #579の解決策に基いて、ひとつ以上の要素メモリを使用することを犠牲にして、eraseのインタフェースを維持したままこの問題を解決した。実際には、非順序連想コンテナに対する計算量の要件は、hashed indicesで以下のように改善した:
- 与えられた要素の削除を、無条件に定数時間にした
- 最悪ケースの計算量はO(n)ではなく、O(ndist)となる。ndistは、そのインデックスにおける要素数とは同等でない数。
- hashed indiciesの
iterator
とlocal iterator
の内部表現が、新しいデータ構造に依存して変更される。これはシリアライズに影響を与えるため、対応するシリアライズのバージョンが0から1に上がる。hashed indiciesの(local) iterator
を含む古いアーカイブは、1.56.0のBoost.Multi-Indexに読み込める。 - hashed indiciesに
reserve
メンバ関数を追加。 - hashed indiciesの等値/非等値のチェックを、C++標準規格の[unord.req]仕様に合わせた。
- Boost.Multi-Indexの
public
インタフェースを、noexcept
に対応した。(noexcept
が使用可能なコンパイラで) multi_index_container
への挿入失敗のパフォーマンスを改善した。- MSVC 7.0以前のサポートを目的とした内部コードを削除した。この修正によって、コンパイル時間がわずかに速くなる可能性がある。
- 右辺値を挿入できなかったバグを修正(#9665)
BOOST_BIND_NO_PLACEHOLDERS
に対応し、名前空間修飾なしのプレースホルダーを直接使用しないように修正(#9798)- メンテナンス上の細かい修正
Multiprecision
- 浮動小数点数型から
rational
への変換をimplicit
にした(#10082) checked_cpp_rational
typedefの定義を修正cpp_int
の、文字列からの代入でのバグを修正(#9936)- 2進浮動小数点のバックエンドとして、
cpp_bin_float
を追加。 cpp_int
の文字列からの代入で発生するバグを修正(#9936)。- 符号がクリアされない。
- MSVCのコンパイラintrinsicをインクルードするよう修正(#9336)
- ドキュメントの誤字を修正(#9432)
gmp_rational
をムーブコピーできるよう修正(#9497)numeric_limits
の値のリストをドキュメントに追加
Odeint
- 適切な代数と操作を自動検出するディスパッチャーを追加
- Eigen、Boost.Multiarray、Boost.MPI、Boost.Compute、Blaze、NT2のサポートを追加
- 代数インタフェースを、algebra.norm_inf関数を使用するよう変更した
- ODEの解をイテレートするためのイテレータを追加。これは、積分(integrate)関数の代わりに使用できる。
- Velocity-Verletメソッドを追加
- 小さなバグ修正
Optional
- 右辺値参照のサポートを追加。
optional<T>
が、ムーブ可能でコピー不可なT
型を扱えるようになった。 swap
を改善した。(ムーブ操作を使うようにした)emplace()
メンバ関数を追加。これは #1841 でリクエストされたもの。optional
をムーブ可能にした。std::move_if_noexcept
と組み合わせられる、条件付きのnoexcept
仕様にした。- 破壊的変更 プラットフォームがサポートしていれば、safe boolイディオムの代わりに
explicit operator bool()
を使用するようにした(#4227)。 optional
オブジェクトを誤って不適切にシリアライズしないように、operator<<(ostream&, optional const&)
の先行宣言を定義した。- 非推奨なメンバ関数である
reset()
の使用を、サンプルコードから削除した(#9005)。 boost::none
との比較では、T
にEqualityComparableを要求しないようにした。optional<T&&>
を明確に禁止した。- 破壊的変更
optional<T&>
への一時オブジェクトの束縛を、明確に禁止した。 - 包含している値にアクセスする新たな手段として、
value()
、value_or()
、value_or_eval()
メンバ関数を追加。 - ドキュメントを更新し、再編した。チュートリアルとクイックガイドの項を追加。
Preprocessor
- 可変引数マクロを使用する場合のタプル機能を、配列機能と一致するものとして追加した。
Program Options
Regex
basic_regex<>::mark_count()
の挙動を、ドキュメントに一致するよう修正した。basic_regex<>::subexpression(n)
も同様に、一致するよう修正(#8903)。- ドキュメントの誤字を修正(#9283)
- ロケールによって生成された照合文字列へのnul埋め込みが失敗した場合の、照合コードのバグを修正(#9451)
- Threadライブラリの非推奨なミューテックスを使っていたのを修正(#9461)
- 不正なUTF-8シーケンスの、より良いチェッカーを追加(#9473)
Smart Pointers
make_shared
とallocate_shared
のオーバーロードを更新し、C++言語規格にN3939で提案されている配列型(T[]
,T[N]
)に対応した。- C++標準の欠陥レポートLWG #2070に対応し、
make_shared
とallocate_shared
におけるスカラ型と配列型の実装を修正した。
Thread
実験的な新機能
when_any()
関数を追加(#7446)when_all()
関数を追加(#7447)async()
関数に、スケジューラをとるパラメータを追加(#7448)- 並行キューとして、
sync_queue
とsync_bounded_queue
を追加(#8274) thread_pool
executorを追加(#8513)latch
クラスを追加(#8518)future
/shared_future
のthen()
メンバ関数に、スケジューラをとるパラメータを追加(#8516)with_lock_guard()
関数を追加(#9058)- 動的なexecutorと、executorアダプタを追加(#9571)
バグ修正
- Windowsの64ビット環境上で、
GetTickCount()
関数の代わりに、GetTickCount64()
関数を追加(#8070) scoped_thread
がmsvc-12.0でコンパイルエラーになる問題を修正(#9333)- intel-linux-14.0.1上で
scoped_thread
がコンパイルエラーになる問題を修正(#9341) - msvc-10,11,12上で、
async(Executor, ...)
のコンパイルに失敗する問題を修正(#9366) - msvc-10,11,12上で、executorのテストを通した(#9402)
make_future
のテストを通した(#9404)- Synchronizationドキュメントの細かい修正(#9471)
future_waiter::add()
がクラッシュする問題を修正(#9535)try_lock_for()
に0ミリ秒を指定した場合、Windows上でプログラムが終了しない問題を修正(#9618)thread
クラスのデストラクタの説明が不明瞭だったので修正(#9625)thread
クラスに、アンドキュメントなpublic
メンバ関数start_thread()
があったので、private
に移動(#9632)- MinGW上で、
boost::thread::physical_concurrency()
関数がコンパイルエラーになる問題を修正(#9673) boost::condition_variable::timed_wait()
にBoost.DateTimeの無限時間を指定すると、意図と違ってすぐに目覚めてしまう問題を修正(#9708)future::then()
に指定した関数が、2回呼ばれてしまう問題を修正(#9711)- gcc-mingwは多くの問題があったため、Boost.Buildから削除された。代わりに
<toolset>gcc,<target-os>windows
を使うよう修正した(#9867) future
のドキュメントの誤字を修正(#10008)call_once()
内でヌルポインタにアクセスする可能性があったのを修正(#10058)call_once()
の右辺値参照エミュレーションでの可変引数バージョンがコンパイルエラーになっていた問題を修正(#10125)call_once()
の(Function, once_flag&)
のオーバーロードを非推奨化(#10126)- AIXのgcc上の
pthread_delay_np()
関数はパラメータが異なっているため、コンパイルエラーになっていた問題を修正(#10147) - PowerPC上での
thread::physical_concurrency()
が常に0を返していたので、修正(#10155) when_any()
とwhen_all()
にinline
を付け忘れていて、シンボルの重複定義でリンクエラーになっていた問題を修正(#10184)
TTI
Unordered
- 小さなドキュメントと警告の修正(#9377, #9719)
- 整数のバケットに、常に素数を使用するようにした。連続した整数を挿入するときのパフォーマンスを改善(#9282)
- C++11標準仕様に基づき、アロケータのみを使用してメモリ確保するようにした。
Utility
- いくつかのコンポーネントを、Boost.Coreモジュールに移動した。
empty_deleter
を非推奨とした。代わりにBoost.Coreのnull_deleter
を使用すること。base_from_member
ユーティリティで、左辺値参照のメンバ型をサポートした。(#7577)
UUID
- 基本的なC++11機能のサポートを追加。
- SSE最適化バージョンの関数を実装した。これには、
swap
や比較演算子も含まれる。SSE版は、コンパイラによって自動的に有効になるが、明示的に有効/無効を設定できる(#8509)。BOOST_UUID_NO_SIMD
、BOOST_UUID_USE_SSE2
、BOOST_UUID_USE_SSE3
、BOOST_UUID_USE_SSE41
のいずれかをdefineする。
- いくつかの警告を黙らせた(#8495, #8697)。
Predef
BOOST_PLAT_*
のプラットフォーム定義に、MinGWとWindowsのバリエーションを追加。- Windows 8のモバイルデバイスをターゲットとするWindowsで、ARMアーキテクチャを検出できるようにした。
- 64ビットARMの検出を改善。
- オペレーティング・システムとして、iOSの検出を追加。
- いくつかのプラットフォームでのエンディアン検出を改善。
- プラットフォームとコンパイラを検出するための、エミュレーション機能を追加。
Variant
- 破壊的変更 サポートしているコンパイラでは、可変引数テンプレートを使用するようにした。これによってバイナリが小さくなり、コンパイル速度も改善することを期待できるが、いくつかのケースで既存のメタプログラミングコードを破壊する可能性がある。とくに、
BOOST_VARIANT_ENUM_PARAMS
とBOOST_VARIANT_ENUM_SHIFTED_PARAMS
が使われなくなったことについて注意が必要だ。可変引数テンプレートを使用する場合、BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES
が無効になる。 polymorphic_get()
関数を追加(#9479)- ムーブのみ可能な型をビジターから返せるようにした
variant::swap()
を最適化し、move_swap()
との曖昧さを修正(#2839)- ムーブ代入演算子、デフォルトコンストラクタ、ムーブコンストラクタに条件付きの
noexcept
を追加し、variant
をmove_if_noexcept()
フレンドリーにした。 -fvisibility=hidden
フラグが設定されていても、例外をモジュール間で見えるようにした。- 古いコンパイラのサポートを終了した。
- 警告を修正(#3020)
<ライブラリ名>
新機能 (必要であれば分類分けをする) - <追加、変更、削除内容> (#0) (←svn.boost.orgのissuesへのリンク) - <追加、変更、削除内容> (r0) (←svn.boost.orgのcommitへのリンク)バグ修正
- 破壊的変更: 赤文字+ボールドではっきりと分かるように
- ABI変更: これも赤文字で
- [訳注] 本家ノートの記述が不十分であると考えるときは、適宜注釈を入れる
- 参照: 必要であれば外部の文献へのリンクを挿入する
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.4, 3.3, 3.2, 3.1, 3.0
- Clang, C++98: 3.3.16
- Clang, C++11, libc++: 3.4.2
- Clang, C++1y: 3.3.16
- GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
- GCC, C++98: 4.9.0
- GCC, C++11: 4.8.2
- GCC, C++1y: 4.9.0
- Intel: 13.1
- OS X:
- Apple Clang: 5.1
- Apple Clang, C++11: 5.1
- GCC: 4.2.1
- Intel: 12.0
- Windows:
- GCC, mingw: 4.9.0, 4.8.2, 4.7.3, 4.7.2, 4.6.3, 4.5.4, 4.4.7
- Visual C++: 12.0, 11.0, 10.0, 9.0
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC: 4.4.2
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.4, 3.3, 3.2, 3.1, 3.0
- Clang, C++98: 3.3.16
- Clang, C++11, libc++: 3.4.2
- Clang, C++1y: 3.3.16
- Clang, C++14, libc++: trunk
- GCC: 4.8.2, 4.8.1, 4.7.3, 4.6.4, 4.4.7
- GCC, C++98: 4.9.0
- GCC, C++11: 4.9.0, 4.8.2
- GCC, C++1y: 4.9.0
- Intel: 13.1, 13.0, 12.1, 11.1
- OS X:
- Apple Clang: 5.1
- Apple Clang, C++11:
- Clang: trunk
- Clang, C++11: trunk
- GCC: 4.2.1
- Intel: 12.0
- Windows:
- GCC, mingw: 4.9.0, 4.8.2, 4.7.2, 4.6.3, 4.5.4, 4.4.7
- Visual C++: 12.0, 11.0, 10.0, 9.0
- FreeBSD:
- GCC: 4.2.1
- QNX:
- QCC, ARM: 4.4.2
- QCC, x86: 4.4.2
翻訳
Akira Takahashi