本家リリースノート:
新ライブラリ
- 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++0x
modeに仕様に沿った定義済みマクロの追加。現在__cplusplus
は201101L
と定義されているが、言語仕様が決定する際に変更されるかもしれない。- オブジェクト形式マクロがカッコと隣接していて、
expanding_object_like_macro()
フック関数によってマクロ展開が抑制されるとき、カッコが消えてしまう問題を修正。 pragma option(preserve)
のバグを修正 (以前の値がpreserve=2
だった場合、perserve=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