Boost 1.59.0がリリースされました

Boost 1.59.0がリリースされました。リリースノートはいつものように、boostjpサイトで翻訳を行い、公開しています。

新ライブラリ

Boostには以前からlexical_cast()という強力な数値・文字列間の変換関数がありました。このライブラリは、それをより強力にした機能が多数入っています。

たとえば、型変換の際に使用するマニピュレータを指定できるようになったので、基数(2進数、16進数とか)の指定、浮動小数点数の精度の指定などができます。ほかにも、変換に失敗したときのエラー処理も、選択の幅が広がったりしています。

C++14で書かれたコルーチンライブラリです。前バージョンは非推奨となります。

主な更新内容

少し前にこのブログで紹介した、ranked indicesという新しいインデックスが追加されました。参照:「Boost.Multi-index ランク付きインデックス

Boost.Testがバージョン3にメジャーアップデートしました。

これまでは、BOOST_CHECK_EQUAL(a, b)のように、比較演算子ごとにマクロを使い分けていましたが、このバージョンから汎用的なテストマクロとしてBOOST_TESTが追加されました。

BOOST_TEST(a == b)のように、演算子で直接比較ができ、失敗した時のエラーメッセージもこれまで通り、比較対象の「値」(変数名ではない)が出力されます。Power Assertと呼ばれているものですね。

#define BOOST_TEST_MODULE example
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(a_equal_b_test)
{
  int a = 1;
  int b = 2;
  BOOST_TEST(a == b);
}
Running 1 test case...
main.cpp:8: error: in "a_equal_b_test": check a == b has failed [1 != 2]

*** 1 failure is detected in the test module "example"

そのほか、パラメタライズドテストのサポートも追加されています。Boost.Testでは、Data driven test(データ駆動テスト)と呼ばれています。