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