本家リリースノート:
- https://svn.boost.org/svn/boost/website/public_html/live/feed/history/boost_1_52_0.qbk
- http://www.boost.org/users/history/version_1_52_0.html
更新ライブラリ
- Accumulators
- Config
- Chrono
- Container
- Date Time
- Foreach
- Function
- Graph
- Hash
- Interprocess
- Iterator
- Lexical Cast
- Math
- Phoenix
- Polygon
- Proto
- Ratio
- Result Of
- Thread
- uBLAS
- Unordered
- Uuid
- Wave
- Xpressive
Accumulators
ベータリリース後に追加された修正
- オリジナルのtagを実装する時に既存のタグを継承すると、依存性がその意図した通りに解決されない長年の問題を修正 (#7409)
- 訳者注:このバグは2008年の6月から存在していた
Config
- GCC 4.4のSFINAEがあまりにもバギーだったので、
BOOST_NO_SFINAE_EXPR
を定義した
Chrono
新機能
- chrono I/Oの強化。これはHoward Hinnantによって提案された機能である(#5980, proposal)。
time_point
フォーマット状態のためのio state saverを追加(#5981)- 低レベルのI/O機能群を追加(#7059)非推奨機能
- Boost.Chrono 1.2.xに含まれるchrono i/o。これはバージョン2.0でリファクタリングされている。
- chrono i/o : マニピュレータ
duration_short
およびduration_long
を非推奨とする。代わりにパラメータ化されたduration_fmt
、もしくは名前変更されたマニピュレータduration_style::symbol
およびduration_style::prefix
を推奨する。 - chrono i/o :
duration_punct<>
ファセットを非推奨とする。ローカライズ用途には、get_duration_style
フリー関数で情報を取得し、duration_units
ファセットを使用する必要がある。 BOOST_CHRONO_VERSION==2
の場合には、非推奨機能は使用できない。
バグ修正
- C++11準拠 :
constexpr duration
から非const
ローカル変数への代入で、未解決シンボルになる問題を修正(#7381)
修正なし
chrono_io.hpp
:operator<<(ostream& os, …)
によってos
の状態が変更される。バージョン2.0で提供される新たなI/Oではこの問題が解決される。新たなバージョンに移行する必要がある(#6871)。
Betaリリース後に追加された修正
- コンパイラが
constexpr
を対応しているが、標準ライブラリインターフェースがconstexpr
に対応していない場合のコンパイルエラーを修正 (#7479)
Container
stable_vector
のテンプレートコード膨張と型安全性を改良した- doxygenドキュメントを改良するために、シーケンスコンテナのtypedefを変更し、関数の並びを変えた
- バグ修正
- ドキュメントのリンクを修正(#6615)
flat_map
/flat_multimap
のドキュメントで、比較述語の型がstd::less< std::pair< Key, T> >
と記述されていたので、std::less<Key>
に修正(#7139)string::insert()
が返すイテレータが、標準と異なり、+1の位置を返すようになっていたので修正(#7215)- 範囲を引数にとる
Container::insert()
メンバ関数が、C++11からイテレータを返す仕様になったためその機能を実装した(#7232) - 範囲を引数にとる
vector::insert()
メンバ関数が、逆順で挿入されたりクラッシュしたりする問題を修正(#7269) flat_map
/set::insert(ordered_unique_range_t, …)
の挙動がおかしかったのを修正(#7439)
- C++11の、範囲を引数にとる
insert()
メンバ関数がイテレータを返すという仕様を実装し、ほとんどのコンテナの挿入コードをクリーンナップした - エイリアシングエラーを修正
Date Time
BOOST_DATE_TIME_NO_LIB
をドキュメントに記載(#6077)nth_as_str()
関数内で、AND条件をORで書いていたのを修正(#7022)- いくつかの警告を修正(#7234)
Foreach
- GCCでのアライメント警告を修正
Function
- ムーブコンストラクタとムーブ代入演算子を追加(#7330)
- C++11で右辺値参照が使える環境のみサポート
Graph
バグ修正
grid_graph
のドキュメントに「2次元以上」と記載していたが、そんな制限はなかったのでドキュメントを修正(#6950)- 辺の緩和条件(relaxation condition)を判定する
relax.hpp
のrelax()
関数において、先行マップが変更された場合でもfalse
を返してしまう問題を修正(#7226) - バンドルプロパティに継承関係のあるクラスを指定した場合、基本クラスのメンバを使おうとするとコンパイルエラーになっていた。バンドルプロパティの取得・設定には、指定した型のみではなく継承関係にある型を許可するよう修正した(#7308)
- テンプレートパラメータの
Graph
から直接null_vertex()
を呼び出していたのを、graph_traits
を経由するよう修正した(#7327) pending
/indirect_cmp
の戻り値型が間違っていたので修正(#7338)- コア数を計算する
weighted_core_numbers()
アルゴリズムで、正しい使用方法にも関わらずout_of_range
例外が送出されていた問題を修正(#7341) lookup_one_property_internal
プロパティクラスがtype
型を持っていなかったので追加(#7378)astar_search_no_init()
の名前付き引数バージョンから通常のバージョンを呼び出す際に、color
パラメータとindex_map
パラメータを逆に渡していたので修正(#7380)dijkstra_shortest_paths()
/dijkstra_shortest_paths_no_color_map()
において、無限の重さは正しく動作する保証がないことをドキュメントに記載(#7398)- 未使用変数の警告を修正(#7428)
Hash
- アクシデントにより
enum
のサポートが削除されたのをリストア (#7437) - 新しい浮動小数点数用
hasher
を用意- バイナリを
hash
することで多くのプラットフォームで高速に動作するようになった
- バイナリを
Interprocess
mapped_region
にshrink_by()
関数とadvise()
関数を追加- ABI破壊:
circular buffer index
でmessage_queue
を再実装(古い実装では、順序付けされた配列を過度にコピーしていた)。これはパフォーマンスを大幅に改善するが、ABIは壊れる。古い挙動とABIが必要な場合は、boost/interprocess/detail/workaround.hpp
のBOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX
をundefineすること。 message_queue
への挿入時間を改善。一般的なケースでの優先探索を回避(配列と循環バッファ両方の構成)。interproces_sharable_mutex
とinterproces_condition_any
を実装offset_ptr
のパフォーマンスを改善- 整数のオーバーフローチェックを追加
Iterator
バグ修正
破壊的変更
- #5825 を修正するに伴い、不必要な関数の実行は行われなくなった。例えば、終端イテレータの生成に関数は実行されない。つまり、イテレータの参照外しとインクリメントをN回実行すれば関数はN+1回ではなくN回実行される。古い挙動に関連しているユーザコードは調整する必要がある。
- 訳者注:このバグの修正方法では参照外しとインクリメントはセットで行わなければならない。つまり、イテレータのインクリメントだけを行なって読み飛ばそうとすると
BOOST_ASSERT
によりアサートが発生する。
- 訳者注:このバグの修正方法では参照外しとインクリメントはセットで行わなければならない。つまり、イテレータのインクリメントだけを行なって読み飛ばそうとすると
Lexical Cast
lexycal_cast(const CharType* chars, std::size_t count)
というオーバーロードを追加 (#6663)- バグを修正 (#7228)
- 1.51.0でMSVC2003でコンパイルできなくなったのを修正 (#7255)
Math
- 与えられた分布に対して
moments(mean, variance, …)
が定義されていない場合、それを求めようとするとコンパイルエラーも例外も吐かずに数学的に間違っている値を返したりする問題を修正。長い議論の末、全てのmoments
は数学的なポリシーに沿わない場合、domain_error
を投げる(例外が無効な場合はNaNを返す)ことに既になっていた。よってこのバグはそれにあたって解決されている。 (#7177) - 多くの分布で不正な値を検出するルーチンが間違っていた問題を
check_out_of_range
を実装できる機能を追加したことで修正した (#6934) 。これに付随して、不正な値を検出できていなかった分布が更に発見され、同時に修正されている。 - Hankel 関数で
x < 0
かつν
が奇数の場合に不正な値が返される問題を修正 (#7135) boost::math::isfinite
がunsigned int 0
に対してfalse
を返す問題を修正 (#6517)- GCC 4.4で
bessel_ik.hpp
内の匿名enum
による問題を修正 (#6362) - Boostによる必要なマクロ等の定義後に
<complex>
をインクルードしていたことによって Boost.TR1 がうまく動かない問題を修正 (#7053) - Golden ratio等を数学的な定数のリストに新たに追加する提案をfixedとしてマーク。このチケットは相当に古く、現在のバージョンでは phi として既に実装されているため。 (#2693)
cdf
/pdf
/quantile
による 問題のある分布のチェックが不正だった問題は、不正な値を検出するルーチンの改良によって既に修正された。 (#6937)- 浮動小数点数のビット数が小さい特定のコンパイラでそれによって例外が投げられる問題のcompiler workaround (#7099)
Phoenix
decltype
ベースのboost::result_of
が動作するようにした
Polygon
- ボロノイ図に関する拡張機能を追加
- 新たな
Segment
コンセプトを導入 - コンパイルエラーを修正
Proto
- データパラメータのプリミティブな変換は
key
でインデックスされたスロットを持つこともできるようになった - プリミティブな変換は
const
参照されていないtemporary expressionにも適用できるようになった <iterator>
とBoost.Rangeに存在する幾つかのフリー関数について、呼び出し可能な関数オブジェクトの型を追加- Protoのexpression nodesにMPLのalgorithmが動くようになった
proto::pass_through
プリミティブ変換は、Domain
テンプレートパラメータを新たに取るようになった。これによって結果の表現についてのドメインを指定できるようになった。
Ratio
新機能
short_name
とlong_name
関数はそれぞれsymbol
とprefix
関数に置き換えられた
非推奨
ratio_string<>::short_name
とratio_string<>::long_name
は非推奨となった。それぞれratio_string<>::symbol
とratio_string<>::prefix
を使用することが推奨される。非推奨となった関数は1.55まで提供される。
ベータリリース後に追加された修正
- コンパイラが
char16_t
とchar32_t
に対応しているが、標準ライブラリがstd::u16string
とstd::u32string
に対応していない場合のコンパイルエラーを修正 (#7478)
Result Of
decltype
が”満足に動作する”のであればboost::result_of
はdecltype
で実装される。つまりコンパイラがn3276の提案を実装していることが要求される- 現在、n3276を実装しているのは非常に最近のコンパイラであるClang 3.1のみである
boost::result_of
がdecltype
で実装されているのであればn3436で実装される- n3436の提案は
result_of
でSFINAEできるようにする提案
- n3436の提案は
Thread
- 廃止予定機能: Boost 1.50.0からBoost 1.55.0まで利用可能な廃止予定機能。これらの廃止予定機能は、Boost 1.52.0までデフォルトで提供される。非推奨機能が必要ない場合は、
BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0
をdefineすればよい。1.53.0移行で廃止予定機能を使いたい場合は、BOOST_THREAD_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0
をdefineすること。これらの廃止予定機能は、Boost 1.55.0までの提供なので、1年以内に新機能に移行すること。- 時間関連の関数にBoost.DateTimeライブラリを使わず、代わりにChronoオーバーロードを使用する。
BOOST_THREAD_VERSION==3
での破壊的変更(Boost 1.53.0からのデフォルト): いくつかの新機能は、インタフェースが同じで挙動が異なる。BOOST_THREAD_VERSION
が3の場合でも、マクロによる動作切り替えで限定的に2の機能を提供する。廃止予定機能はBoost 1.55.0まで利用可能である。
新機能
- C++11準拠: 不足していた
async()
を追加(#4710) - C++11準拠:
notify_all_at_thread_exit
を追加(#7283) - C++11準拠:
recursive mutex
のtry_lock
にnoexcept
を追加(#7345)
バグ修正
thread_specific_ptr
のキーの本質、計算量、論拠をドキュメント化(#2361)thread_specific_ptr
の2つの問題を修正: 1. dllでスレッドが使われる場合、スレッドローカルストレージのクリーンナップコードが呼ばれる前にdllがアンロードされるとクラッシュする。 2. 微妙にリークしてる(#2797)future.hpp
のコンパイルエラーを修正(#5274)- WIndows CE 6.0上でコンパイルエラーになる問題を修正(#5431)
call_once
が、いくつかのプラットフォームで動作しない可能性があったので修正(#5752)- Threadライブラリのビルドで、
date_time
が自動的にビルドされない問題を修正(#7045) - 誤字修正:ドキュメントで
interrupt_point()
と書いていたところをinterruption_point()
に修正(#7173) - libs以下にあるテストコード中で、
#include <libs/thread/src/pthread/timeconv.inl>
のようなパス指定でインクルードを行っていた。これはCMakeで問題になるので、相対パスでインクルードするようにした(#7200) - インライン関数に
dllimport
を指定していて警告が出ていたので修正(#7220) this_thread::sleep_for()
がinterrupt()
に対応してなかったので修正(#7238)- バージョン3関連のドキュメントtypoを修正(#7245)
win32/thread_primitives.hpp
の、Intel C++ compiler 12.1での警告を修正(#7272)shared mutex
に対するlock
とshared lock
へのアクセスには優先順位がないことを明記(#7284)boost/thread/future.hpp
がHPUXでコンパイルエラーになっていたので修正(#7329)BOOST_THREAD_DONT_USE_SYSTEM
が動作していなかったので修正(#7336)packaged_task
がアロケータを指定された場合、アロケータへの参照をメンバに保持していたので、コピーを保持するよう修正(#7349)packaged_task
がアロケータを指定された場合、デストラクタを呼んでいなかったので修正(7350)
uBLAS
inplace_solve()
のパフォーマンス向上(#4024)coordinate_matrix::sort()
がGCC 4.7でコンパイルエラーになっていた問題を修正(#7363)- 内部で
std::inplace_merge()
を使用していたが、index_triple
のイテレータはプロキシオブジェクトを返すため、標準アルゴリズムの要件を満たしていなかった
Unordered
- 要素の追加時に既存のノードを再利用できる時は再利用するようにした
- その他、実装のリファクタリング
ベータリリース後に追加された修正
- 区間を
erase
するときにクラッシュしていたのを修正 (#7471)
Uuid
ベータリリース後に追加された修正
- 536,870,912バイト以上のメッセージに対して
sha1.hpp
が正しく計算できていなかったのを修正 (#7128)
Wave
boost::filesystem::create_directories()
の仕様変更に応じてutil::create_directories()
を新たに定義した- 直前の行が空のマクロの展開だけの場合、プリプロセス時の文脈が認識されなくなる、非常に発見しづらいバグを修正 (テスト t_9_023.cpp を追加)
- 新たなオプション
--license=<file>
を追加。これによって、生成される新しいファイル全ての先頭に対して<file>
の中身をプリペンドできるようになった。これはPhoenixやFusionで使用されている部分的なプリプロセッシングの実装を簡単にする。 -N
オプションの動作を変更。以前はマクロ自体が無いものとして扱われていたが、この変更によってマクロ展開全てはスキップされず、引数の展開は行い、そのマクロ自身の展開のみ行わないようになった。
Xpressive
sub_match
をBoost.Rangeで動作するようにした (#7237)
テスト済みコンパイラ
- Linux
- GCC: 4.2.4, 4.3.4, 4.4.3, 4.5.3, 4.6.2, 4.7
- GCC, C++11 mode: 4.3.4, 4.4.3, 4.5.3, 4.6.2
- Intel: 11.1, 12.0, 12.1
- LLVM Clang: 2.8
- OS X
- GCC: 4.4
- GCC, C++11 mode: 4.4.4
- Intel: 11.1, 12.0
- Windows
- GCC, MinGW: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
- Visual C++: 8.0, 9.0, 10.0
- FreeBSD
- GCC: 4.2.1(32/64bit)
追加のテスト済みコンパイラ
- Linux
- Cray: 8.0
- LLVM Clang: from subversion
- LLVM Clang:
- GCC: 4.2.4, 4.3.4, 4.4.4, 4.5.3, 4.6.2, 4.6.3, 4.7.0, 4.7.1, 4.7.2
- GCC, C++11 mode: 4.3.4, 4.4.4, 4.5.3, 4.6.3, 4.7.1
- pgCC: 11.9
- Intel: 10.1, 11.1, 12.0, 12.1
- Visual Age: 10.1
- OS X
- LLVM Clang: subversion
- LLVM Clang, C++11 mode: subversion
- Intel: 11.1, 12.0
- GCC: 4.4.4
- GCC, C++11 mode: 4.4.4
- Windows
- Visual C++: 8.0, 9.0, 10.0, 11.0
- Visual C++ with STLport: 9.0
- Visual C++, Windows Mobile 5, with STLport: 9.0
- GCC, MinGW: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.0
- AIX
- IBM XL C/C++ Enterprise Edition: V12.1.0.0
- FreeBSD
- GCC: 4.2.1(32/64bit)
- Solaris
- Sun: 5.10
翻訳
Kohei Takahashi, Akira Takahashi, manga_osyo, Nana Sakisaka(saki7)