本家リリースノート:
新ライブラリ
- Interval Container Library。interval setとmap、および interval に関連づけられた値の集約。作者:Joachim Faulhaber。
更新ライブラリ
- Array
- Asio
- Bind
- Concept Check
- Filesystem
- Fusion
- Graph
- Hash
- Iterator
- Math
- Meta State Machine
- Optional
- Pool
- Program Options
- Proto
- Signals
- Spirit
- Tokenizer
- Unordered
- Wave
更新ツール
Array
Asio
ip::address_v4::broadcast()を64ビット環境で使用する場合に生じる整数オーバーフローの問題を修正。- プログラムがしばらく動作したあとに、
deadline_timerハンドラーの期限内の呼び出しを阻む、古い Linux カーネル上の問題を修正(timerfdサポートなしでepollが使われるところ) (#5045)。
Bind
make_adaptableのドキュメントを記載(#4532)。
Concept Check
- 自己代入による警告を修正(#4918)
Filesystem
- デフォルトのライブラリバージョンをv3にした。
- IBM vacpp: コンパイラのバグによる
iterator_facadeのworkaroundに対応(#4912)。 - 検証し、ドキュメント化された
<boost/config/user.hpp>は、BOOST_FILESYSTEM_VERSIONの規定のために使用される(#4891)。 - Cスタイルの
assertをBOOST_ASSERTで置き換えた。 unique_path()の非推奨を取りやめた。代わりに、スレッド安全性と cwd のための代替手段を注記するようにした。unique_path()は非推奨にするにはあまりに便利すぎる!- GCC のいくつかの警告を解消。
BOOST_THROW_EXCEPTIONを使用するよう、 v2 コードを修正。- Windows: 非symlink reparseポイントを正確に報告するよう
status()を修正。 - directory symlink に再帰の制御を許可するために、
recursive_directory_iteratorにsymlink_optionを追加。- ※注: directory symlink はデフォルトでは再帰できない。
- リファレンスドキュメントをクリーンナップした:リンク切れ、インクルード漏れ、記載されていない関数の追加。
- 雑なコードをクリーンナップ。
Fusion
vectorのコピーコンストラクタを、異なる環境でも同じ順序でシーケンスメンバをコピーするよう修正(#2823)。
Graph
- Visual C++ 7.1 で Graphviz 出力が動作するよう修正。
assertをBOOST_ASSERTに置き換え。- 使用する Boost.Filesystem のバージョンを v3 に変更。
- (
graph_traits等を用いて) アダプトされたユーザー定義グラフを、reverse_graphアダプタとともに使用する際の問題を修正(#1021)。 - GraphML を使用する場合はビルドが必要であることをドキュメントに記載(#4556)。
r_c_shortest_pathのオーバーロードのうち一本の経路を要求するバージョンについて経路が見つからなかった場合にクラッシュする問題を修正(#4631)。- BGL ヘッダファイルと
boost/range/irange.hppで名前衝突が発生する問題を修正(#4642)。 - カスタム
property_mapがastar_searchで動作しない問題を修正(#4715)。 dijkstra_shortest_path(ダイクストラ法)のドキュメント中で、最小スパニングツリーでないものを最小スパニングツリーとして記述していた問題を修正(#4731)。prim_minimum_spanning_tree(プリムの最小全域木)のドキュメント中でdistance_mapに関する記述が間違っていたので修正(#4737)。subgraph.hppのremove_edge_ifとclear_vertexが(遅いが正しいコードなのに) "wrong" とコメントで記述されていた問題を修正(#4753)。generate_random_graphの結果が指定通りの辺数にならない場合がある問題を修正(#4758)。copy_componentが正しく動作しない場合がある問題を修正(#4793)。- GraphML の parser が
edgeの省略可能なプロパティidを必須としていた問題を修正(#4843)。 - ドキュメントのスペルミスを修正(#4851)。
- Dijkstra アルゴリズムの計算量の記述が誤っていた問題を修正(#4852)。
clustering_coefficientがgraph_traitsを使っていなかった問題を修正(#4887)。filtered_graphでグラフに対するプロパティの扱いが抜けていた問題を修正(#4914)。- 部分グラフに対してループ辺を追加した場合に二重に追加される問題を修正(#4966)。
- Trac 上に無い種々の問題の修正。
Hash
std::type_indexをサポート-Wconversion警告を回避
Iterator
implicit_castでの問題を修正(#3645)function_input_iteratorを追加(#2893)transform_iteratorはfunction_object_resultという独自の result type を使うのではなくてboost::result_ofを使うように修正(#1427)
Math
- Wald分布(Wald distribution)、 逆ガウス分布(Inverse Gaussian distribution)、幾何分布(geometric distributions)を追加。
- configurationマクロの情報を追加。
- real-numered 型のために
mprealのサポートを追加。
Meta State Machine
- Back-end チュートリアルに、コンパイル時状態マシン解析(Compile-time state machine analysis)の節を追加。
- Back-end チュートリアルに、 Boost.Parameter によるポリシー定義(Policy definition with Boost.Parameter)の節を追加。
- Back-end チュートリアルに、メッセージキューのカスタマイズ(Customizing the message queues)の節を追加。 イベント、もしくは遅延されたイベントのキューのコンテナを提供することが可能になった。 Boost.CircularBuffer による効率的な実装。
msm::back::state_machine<>::is_flag_activeメソッドのconst版を用意した。- Back-end チュートリアルに、遅延処理のためのイベントキューイング(Enqueueing events for later processing)の節を追加。
- バグ修正
- deferred eventsがVC++8.0で動かなかった問題を修正(#4926)。
- Defer functorでスタックオーバーフローしていた問題を修正。
- initial stateで、匿名サブマシンの遷移が動作していなかった問題を修正。
Optional
- コンパイラのバグでテストが失敗する可能性があるということをテスト結果に記述(#2294)
Pool
- poolに
max_sizeをセット可能になった(#2696) boost/pool/pool.hpp static_castのかわりにreinterpret_castが使われている問題を修正(#2941)boost::pool_allocator vectorのvectorでも動作するように修正(#386)- Microsoftのメモリリーク検出機能との互換性を確立した(#4346)
Program Options
Proto
- ※破壊的変更:
<boost/proto/core.hpp>で定義されていたfunctional::pop_frontとfunctional::reverseを<boost/proto/functional>に移動。 - 多くのFusionアルゴリズムのラッパー(
fusion::at等)と、標準ユーティリティライクなmake_pair,first,secondを 新たな<boost/proto/functional>ディレクトリに追加。 - 文法から個別に変換を指定するのを許可。
proto::matchesは、ドメイン固有式(domain-specific expression)を保存するラッパー。proto::and_内でのoperator,の ADL 問題を修正。- 複数ドメインの式における文法チェックのハンドリングを修正(#4675)。
proto::display_exprでoperator<<が曖昧になっていた問題を修正(#4910)。- Proto expression で
fusion::is_sequenceがtrueを返すよう修正(#5006)。 - GCC で
-Wundefオプションを使用したときに<boost/proto/fusion.hpp>で警告が出ていたのを修正(#5075)。
Signals
- gcc で警告が出ないようにした(#4365)
Spirit
Spirit V2.4.2
新機能
- Spirit.Qi および Spirit.Karma のドキュメントに、キーワードインデックスを追加。
- コンテナに対して属性値を追加する場合に呼ばれる新たなカスタマイゼーションポイントとして
traits::assign_to_container_from_valueを追加。 - 「
lit(foo)」か「foo」かを区別することを可能にするために、sprit::litを実装するために使われていたproto::litを独立したバージョンに置き換えた。この変更によってセマンティクスは全く変更されないはずであり、既存コードも破壊されないはずである。 - コンテナ属性型として代入可能にするために、 Spirit.Qi に
as<T>[]ディレクティブを追加(また、stringの特殊化バージョンであるas_stringおよびas_wstringを追加)。 - 出力生成中にコンテナ属性型として処理可能にするために、 Spirit.Karma に
as<T>[]ディレクティブを追加(また、stringの特殊化バージョンであるas_stringおよびas_wstringを追加)。 - Spirit.Qi において、
lit()を数値に対しても使用できるようにした。 symbols<Ch, T>パーサーで、明示的な名前をエラーハンドリングとデバッギングに使用できるようにした。これは新メンバ関数sym.name(...)を使用することで設定できる。パッチを送ってくれた teajay に感謝する。symbols<Attrib, T>ジェネレータで、明示的な名前をエラーハンドリングとデバッギングに使用できるようにした。これは新メンバ関数sym.name(...)を使用することで設定できる。
Qi もしくは Karma のバグ修正
- Spirit.Qi シーケンスでコンテナ属性を扱う際の問題を解決した。先頭要素に対して適切に解析された属性がシーケンスの後ろの方の値によって上書きされてしまっていた。
- Spirit.Karma の
string(s)ジェネレータを修正。sが属性のプレフィックスだけとマッチした場合でも成功していた。
Spirit.Lex の変更内容
qi::tokenid()プリミティブパーサーで、与えられた token id に基づいた任意の lexer token とマッチすることを可能にした。- デフォルト
lexertl::token<>定義のためのテンプレートパラメータを追加: token id の型。この型はデフォルトでstd::size_tとなる。 id 型として使用されるあらゆる型は、(明示的に)std::size_tに変換可能でなければならない。 lex::char_()およびlex::string()に基づいたトークン定義に、lexerのセマンティックアクションを付加できるようにした。- あるトークンとマッチした後、
lexerが自動的に切り替わるようにlexer状態を指定することを可能にした。この理由のために、トークン定義構文を拡張した:
template <typename Lexer>
struct lexer : lex::lexer<Lexer>
{
lexer()
{
int_ = "[1-9][0-9]*";
this->self("INITIAL", "TARGETSTATE") = int_;
}
lex::token_def<int> int_;
};
- この例の
lexerはint_にマッチし、 "TARGETSTATE" 状態に切り替わる。第2引数が指定されない場合は、(これまで通り)前の状態のままである。 - パーサープリミティブ
qi::tokensおよびqi::tokenidを引数なしで使用できるようにした。その場合、あらゆるトークンにマッチする。 lex::lit()を削除。
Spirit.Lexのバグ修正
- すべての
lexer状態にただちにトークンを割り当てるために、Lexerを与える問題を解決した。これは現在、状態の名前として"*"を使用することで可能となる。たとえば、以下は全てのlexer状態にトークンint_を加えるだろう:
template <typename Lexer>
struct lexer : lex::lexer<Lexer>
{
lexer()
{
int_ = "[1-9][0-9]*";
this->self("*") = int_;
}
lex::token_def<int> int_;
};
注:すべての lexer 状態が lexer オブジェクトに導入されたあと、 self("*") = ... が実行されなければならない。
lexer先読みを修正。先読み操作は現在、その引数として使用されるtoken_defインスタンスが使用したlexer状態を使用して評価される。- multi_pass iterator の中で間違ったトークンがユーザーに返される問題を解決した。これは
lexer状態変更を実行し、トークンマッチを失敗させるためにセマンティックアクションの中でpass_failを使用していたlexerとともの起こるかもしれない。
既知の問題
- 整数リテラル(
int_(10)のような)は、失敗に関して入力を消費する。これは代替演算子に関する問題に結びつくかもしれない。
Tokenizer
isspace/ispunctが間違ったキャラクタ型で呼ばれていたのを修正(#4791)
Unordered
- value type での
operator&の使用を回避。 -Wconversionでの警告を回避。
Wave
V2.2.0
- C++0xでキーワードとされる語をRe2C lexerに追加。
- コマンドラインオプション
--c++0xを追加。このオプションを付けると、C++0xでキーワードされる語と、それらのC++0xトークンへの変換が有効になる。 - 全ライブラリをBoost.Filesystem V3と協調動作するように適合 (デフォルトで有効)。
- 拡張文字・文字列リテラルのサポートと、それに関するテストケースを追加 (テストアプリケーションへのC++0xサポートの追加が要求される)。
--c++0xmodeに仕様に沿った定義済みマクロの追加。現在__cplusplusは201101Lと定義されているが、言語仕様が決定する際に変更されるかもしれない。- オブジェクト形式マクロがカッコと隣接していて、
expanding_object_like_macro()フック関数によってマクロ展開が抑制されるとき、カッコが消えてしまう問題を修正。 pragma option(preserve)のバグを修正 (以前の値がpreserve=2だった場合、preserve=1がセットされないバグ)。- waveコマンドの
--preserveオプションのinteger argumentの解釈を少し変更:- 0: 空白文字は全て処理する
- 1: 行頭の空白文字だけそのままにする
- 2: 行頭とコメントの空白文字だけそのままにする
- 3: 全ての行
#pragma wave option(preserve)は次の引数をサポートする: [0|1|2|3|push|pop]
Boostbook
- ルート要素に対する属性のより良いサポート(
langを含む)
Inspect
- Boostのヘッダで、Cの
assertマクロが使われていないかをチェック
Quickbook
- ドキュメント情報中での
lang属性のサポートを追加 - アンカーを改善
- 条件節での
import、include、xincludeのサポート - Filesystem v3を使用
テスト済みコンパイラ
主要テストコンパイラ:
-
Linux:
- GCC: 3.4.6, 4.2.4, 4.3.4, 4.4.3, 4.4.5, 4.5.2,
- GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0, 4.5.2
- Intel: 10.1, 11.0, 11.1
- Clang: 2.8
- Pathscale: 3.2.
-
OS X:
- GCC: 4.0.1, 4.2.1, 4.4
- GCC, C++0x mode: 4.4.
- Intel: 11.1
-
Windows:
- Visual C++: 7.1, 8.0, 9.0 and 10.0.
- GCC, mingw: 4.4.0.
-
FreeBSD:
- GCC: 4.2.1, 64 bit.
追加のテストコンパイラ:
-
Linux:
- GCC: 3.4.6, 4.2.4, 4.3.4, 4.3.5, 4.4.3, 4.4.5, 4.5.0, 4.5.2
- GCC, C++0x mode: 4.3.4, 4.4.3, 4.5.0, 4.5.2
- pgCC [/ 10.1,] 11.1
- Intel: 10.1, 11.0, 11.1
- PathScale: 3.2, 4.0
- Visual Age C++ 10.1
- Clang from subversion
-
OS X:
- Intel C++ Compiler: 10.1, 11.0, 11.1
- GCC: 4.0.1, 4.2.1, 4.4.4
- GCC, C++0x mode: 4.4.4
- Clang from subversion
-
Windows:
- Visual C++: 7.1, 8.0, 9.0, 10.0
- Visual C++ with STLport: 9.0
- Visual C++, Windows Mobile 5, with STLport: 9.0
- GCC, mingw: 4.4.0, 4.5.1, 4.6.0
- GCC, mingw, C++0x mode: 4.5.1
- Borland: 6.1.3 (2009), 6.2.1 (2010)
-
AIX:
- IBM XL C/C++ Enterprise Edition, V11.1.0.0
-
FreeBSD:
- GCC 4.2.1, 64 bit
-
Solaris:
- Sun C++: 5.10
翻訳
Akira Takahashi, melpon, zakkas783, yak_ex