最終更新日時:
が更新

履歴 編集

Boost 1.58.0リリースノート

本家リリースノート:

リポジトリは以下:

リポジトリからのビルド方法は、egtraさんのブログを参照:

既知の不具合

新ライブラリ

  • Endian
    • プロセッサのエンディアンに関係なく、適切なバイトオーダーに変換する型と関数。
  • Sort
    • 一般的な状況でO(n*log(n))よりも高速な、ハイブリッドな基数ソートであるスプレッドソート(spreadsort)を含む。

更新ライブラリ

Asio

  • #10744 WindowsのConnextEx関数によって生成されるエラー値を、他の環境でも使えるようマッピングした
  • 新たなマクロBOOST_ASIO_DISABLE_CONNECTEXを追加した。これを使用することによって、ConnectExを明示的に無効にできる。
  • #10624 windows::object_handleの競合状態を修正。これは、破棄に対する操作待ちで起きていた。
  • FreeBSD環境でのIPv6アドレスの構文解析を修正。末尾にスコープIDが付いているときに、変換時にEINVALが原因で失敗していた。
  • #9465, #11070 Asioのデフォルト可視性を使用した際に起こる、共有ライブラリの可視性問題について回避策を導入。
  • #10828 メモリ内のキーを読み込む際に、パスワードのコールバックを呼び出すようSSLラッパーを変更。
  • SSLのエラーキューが各操作の前にクリアした際に起こる、SSLエラーの誤報を修正
  • ssl::stream<>が擬似的(spurious)に「短く読み込んだ(short read)」エラーを出力する可能性があったバグを修正
  • #10088 SSLエンジンの冗長なヌルポインタチェックを削除
  • #10690 TLS v1.1と1.2を無効にするオプションを追加
  • 非推奨だったOpenSSLのERR_remove_state関数の使用を削除
  • #8835, #10884 ClangでのC++11機能の欠陥を修正
  • #10982 g++での、C++11のstd::addressofの欠陥を修正
  • マルチキャストのテストでの、join_groupの失敗を非致命的に変更
  • #11116 AsioのテストをBoost.Testから分離した
  • チュートリアルで、結果をフラッシュするためにstd::endlを使用するよう修正
  • Clangのinteger sanitizerで報告された、符号なし整数のオーバーフローを修正
  • yield_contextを使用した非同期操作で、ムーブのみ可能な型を返せるようにした
  • 初期化関数から完了ハンドラを再入的(reentrant)に呼び出せるようにするため、yield_contextを変更した
  • 最新のWindows SDKで動作するように、Windows Runtimeの検出方法を更新

Chrono

バージョン2.0.5

バグ修正

  • #10778 boost::chronodurationクラスが、TriviallyCopyableでないためにstd::atomicに格納できない問題を修正
  • #10840 テストコードtest_7868.cppにおいて、puts()関数の呼び出しがstd::修飾されていなかった問題を修正
  • #10851 テストコードtime_point_output.cppにおいて、puts()関数の呼び出しがstd::修飾されていなかった問題を修正
  • #10893 ドキュメントの細かな誤字を修正
  • #10992 ChronoのIO state saverが、Boost.IO state saverと一貫していない問題を修正
  • #10995 duration_put::put_value()で、少数が切り捨てられる問題を修正
  • #11006 time_fmt_io_saverのインスタンス化がコンパイルエラーになる問題を修正
  • #11012 chrono_io v2において、boost::chrono::duration< boost::rational<int> >がコンパイルエラーになる問題を修正

Container

  • 実験的にsmall_vectorクラスを追加
    • 小さな要素数に最適化されたvector。テンプレートパラメータで指定された要素数の領域を事前に確保することにより、その要素数を超えない限り、insert()push_back()でメモリ確保を行わない。
    • static_vectorとは異なり、フリーストアからメモリ確保し、キャパシティを超えた領域の拡張が可能。
    • LLVMのSmallVectorクラスを参考にしている
  • 依存関係を大規模に見なおした。現在、Boost.Containerは、とても基本的なユーティリティのみをBoost.CoreとBoost.Intrusiveに依存する。プリプロセスされたコードのサイズが小さくなっているため、コンパイル時間が改善する。
  • ランダムアクセスイテレータを持つコンテナ(basic_string以外)に、nth()index_of()メンバ関数を追加。
    • nth()は、指定されたインデックスの要素を指すイテレータを取得するメンバ関数
    • index_of()は、指定されたイテレータが指す要素のインデックスを取得するメンバ関数
  • C++17のallocator_traits<Allocator>::is_always_equalを追加。
  • コンテナのコンストラクタを、以下の仕様に基づいて更新:2210. Missing allocator-extended constructor for allocator-aware containers

バグ修正

  • #9931 再度開かれたチケット「flat_map::insert(ordered_unique_range_t...)move_iteratorを渡せない」を修正
  • #11076 container/detail/copy_move_algo.hppで、memmove()memcpy()を名前空間修飾なしに呼び出していた問題を修正
  • #10790 Boost.Containerのコンテナにlong longを指定するとコンパイルエラーになる問題を修正
  • #10808 vectorの等値比較演算子が壊れていたので修正

ソースの破壊的変更

  • scoped_allocator_adaptorクラスのpropagate_on_container_copy_assignmentpropagate_on_container_move_assignmentpropagate_on_container_swapが、::boost::integral_constant<bool, true/false>ではなくなった。これは、MPLへの依存を減らすため、およびstd::integral_constantとの相互運用保証がなかったためである。boost::true_typeboost::false_typeを仮定したコードはコンパイルが通らなくなる。ワークアラウンドとして、内部の::value定数を使用して::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>のように書くことで、問題を回避できる。

Context

  • ARM/iOS (32ビット + 64ビット) をサポート
  • C++14向けにexecution_contextクラスを追加

Conversion

  • #10780 polymorphic_pointer_downcast()関数とpolymorphic_pointer_cast()関数を追加した(Boris Rasin氏に感謝)
  • 例外を送出する全ての関数が、boost::throw_exception()を使用するようにした
  • ドキュメントを更新

DateTime

  • to_time_t()関数を復活
  • 変数v_typeの名前をvar_typeに変更。AIXのシステム変数と衝突していたため。
  • ドキュメントを修正

Flyweight

  • std::hashboost::hashでのハッシュサポートを追加。
    • この機能はBOOST_FLYWEIGHT_DISABLE_HASH_SUPPORTをdefineすることによって無効化できる。この無効化機能は、ユーザーがflyweightクラスを自前でハッシュサポートしていた場合のためにある。
  • メンテナンス上の修正をいくつか行った

Function

  • #10585 C++11の右辺値、Boost.Moveの右辺値、両方の関数を受け取れるようにした

Functional/Factory

  • 小さな破壊的変更 : アロケータを使用すべきでないことを示すためのデフォルトテンプレートパラメータを、boost::none_tからvoidに変更。これは、Boost.Optionalへの依存をなくすための変更。
    • 引き続きboost::none_tを使用したい場合は、BOOST_FUNCTIONAL_FACTORY_SUPPORT_NONE_Tをdefineすること。ただし、この互換性のための機能は、将来のリリースから削除される可能性があることに注意。

Fusion

以下の記事も参照:

Geometry

新機能

  • 新たなアルゴリズムnum_segmentsを追加。このアルゴリズムは、ジオメトリのセグメント数を返す。
  • is_validアルゴリズムに、新たなオーバーロードを追加。これは2番目の引数でstringの参照を受け取り、ジオメトリの有効性と無効正に関するメッセージで埋める。
  • is_validアルゴリズムに、新たなオーバーロードを追加。これは2番目の引数でenumの参照を受け取り、ジオメトリの有効性と無効性に関する値を設定する。
  • disjointintersectsに、以下のジオメトリの組み合わせサポートを追加:
    • point/multipoint
    • multipoint/multipoint
    • multipoint/segment
    • multipoint/box

改善

  • Bufferに、linestringのためのflat-endサポートを追加。
    • Buffer now supports flat-ends for linestrings with a bend close to the start (such that buffered segment crosses flat-end).
  • Bufferのパフォーマンスを大幅に向上させた。
  • PolygonPartitionのパフォーマンスを大幅に向上させた。全てのオーバーレイ操作が改善する可能性がある。

解決したチケット

  • #8379 行列式の比較結果が間違っている
  • #10108 ジオメトリの一つの点にtouchする特定の状況において、オーバーレイ操作がエラーになる
  • #10201 座標系の比較に、別な関数を使用する提案(wontfix : 問題はあるけれど、いまは修正できない)
  • #10467, #10863 テンプレートパラメータ名がtermios.hのB0マクロと衝突している
  • #10640 CCW Polygonにおいて、buffer()の結果が間違っている
  • #10666 MSVCコンパイラの警告C4127 : 「条件式が定数になっている」を修正
  • #10747 再スケジューリングが、areal/arealの設定操作が原因でエラーになっている
  • #10770 Bufferが巨大な距離、もしくはrough round joinで失敗する。失敗する場所は、凹所(concavities)の交差しないところ
  • #10658 sym_differenceが、intのポリゴンに対して間違った結果を生成する
  • #10835 multilinestringpolygondifferenceが、間違った結果を生成する
  • #10861 RtreeValueがポインタを含むpairもしくはtupleであり、Geometryデフォルト比較のequal_toを使用している場合に、コンパイルエラーになる
  • #10887 Linear/MultiPolygonwithin()relate()が、不正な結果になる
  • #10890 Point/Segmentdisjoint()が不正な結果になる
  • #10904 relate_cartesian_segments戦略において、最上位次元のセグメントの計算が間違っている
  • #10912 Areal/Arealwithin()relate()が、不正な結果になる
  • #10951 WindowsのIntelコンパイラにおいて、/bigobjフラグを設定するとテストに失敗する
  • #10957 様々な関係操作において、アサーションが失敗し、不正な結果を出力する
  • #10958 L/LL/Adijoint()が、不正な結果になる
  • #10959 no_rescale_policyを使用すると、get_turns()がアサーションに失敗する
  • #10960 L/Aget_turns()が不正な結果になる。turnが不足している。
  • #10961 L/Aget_turns()が不正な結果になる。linear spikeのtrunが不正。
  • #11112 Solarisプラットフォームのマクロ名との衝突により、コンパイルエラーになる
  • #11121 整数座標系(integral coordinates)のdifference()が不正な結果になる

バグ修正

  • multipoint/polygonmultipoint/multipolygonの距離の計算でのバグを修正(point内部のarealジオメトリを誤って検出していた)
  • flatten_iteratorの代入演算子で、アクセス違反するバグを修正
  • Cartesian segment-segmentの交差戦略のバグを修正。ひとつのセグメントの点への縮退(degenerate)が、ほかへの縮退をしないセグメントと同一線上にあるときに起こる。
  • centroid()のバグを修正。たとえばゼロ面積のようなものを計算したときに、非決定的な結果になる
  • 限られたポイント数のjoinでの、bufferのバグを修正。
  • 鋭いコーナーの周りにある限られたポイント数のround joinでの、bufferのバグを修正
  • 大きなバッファ距離のjoinでの、bufferのバグを修正
  • ポイント数を追加するround endでの、bufferのバグを修正
  • 大きなバッファ距離のflat endでの、bufferのバグを修正
  • 大きな負のバッファ距離のinterior ringでの、bufferのバグを修正
  • input rangeが空である場合に、closing_iteratorが動作しないバグを修正
  • multilinestringを含む閉じたシンプルなlinestringがハンドリングされない、is_simpleのバグを修正
  • rtreeの、イテレータの組もしくはRangeを受け取るコンストラクタ(パッキングアルゴリズム)のバグを修正。破棄済みの一時オブジェクトへの参照を使用していた。これは、distance()comparable_distance()にも影響する。このバグは、rtreeもしくはdistance()アルゴリズムで、アサーション失敗やセグメンテーションフォルトなど、予期しない動作をする可能性がある。
  • rtreecount()メンバ関数のバグを修正。破棄済みの一時オブジェクトの参照を使用していた。このバグが起こると、大きの場合に0が返る。
  • Rangeのハンドリング関係のバグを修正。いくつかのアルゴリズムで、非コンテナのRangeをジオメトリとして扱った場合に、コンパイルが通ってしまうことを防止する(Samuel Debionneに感謝)

Hash

Interprocess

  • コンパイル時の依存関係を削減した。Boost.Containerの変更に対する更新。

バグ修正

  • GitHub PR #13 HaikuはXSI共有メモリを持っていないため、このライブラリを使用できない

Intrusive

  • とくにフックとイテレータのために、コンパイルの依存関係、ヘッダ、Boost.Preprocessorの使用を削減。

バグ修正

  • Boost Trac #6720 statelessラムダを使用すると、VC11 Beta環境においてintrusive::unordered_set::clear_and_disposeのコンパイルに失敗する
  • #10771 slistremove_ifが壊れている
  • #10853 提案文書に従ってpointer_traitsのドキュメントを記載
  • #10987 any_xxx_node_traitsは参照を返すべきではない

Lexical Cast

Log

バグ修正

  • スレッドIDのフォーマットを修正
  • プロセスIDのフォーマットを修正
  • GNU Hurdでのビルド失敗を修正
  • ticket 11016 ファイルシステムの空き領域が使い尽くされている場合の、text file sink backendの間違った挙動を修正
  • ticket 11106 attribute_set::insert()がいくつかの場合で正しくない挙動をしており、以前に挿入した要素を見つけられなくなっていたのを修正
  • ticket 11148 属性値集合に多くの属性値が挿入された際に attribute_value_set::size() が正しくない挙動をしていたのを修正

より詳細な変更は、Changelogを参照。

Math

  • 2つの特殊関数trigamma()polygamma()を追加
  • 楕円積分のコード(Elliptic integral code)に、Carlsonの最新アルゴリズムを使うよう、大規模な更新を行った。この変更によって、以前よりも安定し、より正確になり、若干高速になるはずだ。CarlsonのRG積分のサポートも追加した。
  • 楕円積分の機能として、ellint_d()jacobi_zeta()heuman_lambda()を追加
  • 名前空間内で定義している定数は、constexprに準拠したコンパイラであればconstexpr定数として定義するようにした(#10901)
  • ベータ関数、ガンマ関数、および楕円積分で、見かけ上のアンダーフローとオーバーフローが起こる様々なケースを修正。Rocco Romeo氏に感謝。
  • 3引数版のlegendre_p()legendre_q()関数に、最後の引数としてポリシーが指定されなかった場合に、オーバーロードされないように修正した。
  • 不完全なbeta()関数の、いくつかの死んだコードを整理(#10985)
  • 極値pdfの巨大な値の入力を修正(#10938)
  • ドキュメントに使用しているグラフと方程式の画像を、PNGからSVGに切り替えた

Move

  • BOOST_MOVE_BASEユーティリティを追加した
  • adl_move_swap()ユーティリティを追加した
  • 他のBoostライブラリへの依存関係を削減し、軽量化した。

バグ修正

  • #11044 boost::rvunionから継承するケースがあったので修正

Multi-index

  • 検索でkey_typeの一時オブジェクトが作られる状況を効率化した。以下のようなケースだ:

    typedef multi_index_container<
      std::string,
      indexed_by<
        ordered_unique<identity<std::string> >
      >
    > multi_t;
    ...
    multi_t m=...;
    m.find("boost"); // std::stringではなくconst char*として渡される
    

    これまでのバージョンでは、find操作ではstd::string型の一時オブジェクトがいくつか作られていた。十分に高度なコンパイラでは、一時オブジェクトはひとつだけ作られるようになった。

  • メンテナンス上の修正を行った

Multiprecision

  • #10993 frexp()関数は、Expression templateを常に使わないようにした
  • #10924 Cygwinやその他のプラットフォームでのcpp_dec_floatのサポートを改善した。long doubleのサポートが欠如していた。
  • #10990 noexceptのサポートを改善し、さらなるテストを追加した。
  • Intel 15.0とSolaris 12.4向けの、様々なワークアラウンドを追加

Optional

  • ドキュメントの改善および、IO操作とヘッダファイルについての記載
  • バグ修正
    • boost::none_tは即値の0から変換できなくなった。これはoptional<rational<int>> oi = 0の様な例で値を格納していないoptionalのオブジェクトが生成されるのを防ぐためである
    • BOOST_OPTIONAL_CONFIG_NO_RVALUE_REFERENCESを定義することでムーヴセマンティックスを無効化できるようにした。これはticket 10399のためのワークアラウンドである
    • ticket 10825 optional_io.hppのインクルードを忘れていた際に、optionalをストリームに渡すとリンクタイムエラーとなっていたのをコンパイルエラーとするように改良
    • ticket 11087 UTに代入若しくは変換できない場合にoptional<U>optional<T>に代入できてしまっていたのを修正
    • ticket 10839 optional<T&>の値をmoveできなかった問題を修正

Phoenix

バージョン3.2.0

新機能

  • オプショナルな拡張として、遅延リストを追加

新たなコード例

  • boost::bind()boost::phoenix::bind()の互換性を示すためのコード例bind_gooseを追加

バグ修正

  • #10927 phoenix/test/stdlib/cmath.cppでのfabs()関数の呼び出しに、std::修飾が抜けていた
  • #11085 phoenix/test/function/function_tests.cppでのpow()関数の呼び出しに、std::修飾が抜けていた
  • bindlambdaletの、いくつかのテストケースが失敗していたので修正

Predef

バージョン1.2

  • Visual Studio 2015のバージョン番号が間違っていたので修正
  • Haiku OSを判定するためのマクロ名がBOOST_OS_BEOSになっていたので、BOOST_OS_HAIKUに修正。
  • Android OSでのエンディアン判定が間違っていたので修正
  • predef_checkプログラムと、ビルド構成チェックのためのBBv2インテグレーションを追加

Random

Smart Pointers

  • enable_shared_from_thisクラスに、thisを指すweak_ptrを返すweak_from_this()メンバ関数を追加

Thread

バージョン4.5.0

実験的な新機能

  • #9600 Async: n4088ベースのtask_regionを追加
  • #10611 emplace版のpromise::set_valueemplace make_ready_futureを追加
  • #10826 スケジューラによるExecutorを追加
  • #11048 継続ベースのserial_executorを追加

バグ修正

  • #6787 システム時刻が巻き戻った時にboost::thread::sleep()がハングしていたのを修正
  • #10734 submit関数が異なるExecutorで異なる挙動をしていたのを修正。方や例外を投げ、方やエラーを握りつぶしていた(thread_executorとinline_executor)
  • #10736 タスクが投げた例外を握りつぶしていた。一貫性の為にN3785で提案された様にstd::terminateを呼ぶ
  • #10737 serial_executorにおいて、タスクが例外を投げた場合に永遠に待ち続けるのを修正
  • #10822 AndroidでBoost.Threadがコンパイル出来なかったのを修正
  • #10824 1.57において、Windows XP SP2以前との互換性に問題があったのを修正
  • #10963 future<future<T>>::thenを実装した
  • #10964 future<future<T>>::unwrap().then()のデッドロックを修正
  • #10968 async()が返すfutureへのfuture::then()はブロックしなくなった
  • #10971 shared_future::get()shared_future::get_or()はconst修飾された
  • #10972 shared_future::then()を複数回呼んでも問題なくなった
  • #10979 make_ready_futureに渡されたreference_wrapper<T>T&に推論するようになった
  • #10996 Windowsでthread::physical_concurrency()が失敗していたのを修正
  • #11035 AndroidでBOOST_HAS_PTHREAD_MUTEXATTR_SETTYPEが定義されていなかった
  • #11053 run_thread_exit_callbacksで純粋仮想関数の呼び出しが行われていたのを修正

TypeErasure

  • MSVC12でのコンパイルエラーを修正

TypeIndex

  • プラットフォームがサポートしている場合、リンク時のアサーションを追加

Units

  • 任意の次元における基底単位を修正(commit 423adb)

Unordered

  • 状態を持ったアロケータを使った際のmove代入演算子の修正 (propagate_on_container_move_assign) (#10777)
  • バケットの数を計算する際にオーバーフローする可能性があったのを修正 pull request 4
  • その他の変更についてはchangelogを参照のこと

Variant

  • 破壊的変更: 取得関数(boost::get<U>(VariantT)及びboost::polymorphic_get<U>(VariantT))について、コンパイル時に検査を行う様に変更。新しい取得関数はUVariantTに格納でき無い場合コンパイルエラーとなる。BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULTを定義することでデフォルトの挙動を戻すことが出来る。get.hpppolymorphic_get.hpp及び#547を参照のこと
  • 不足していた比較関数を追加 #8620, #10811
  • ドキュメントの修正 #10273, #10653
  • Clangで可変長テンプレートを有効に #10832
  • VisitorにてC++14の自動的な戻り値の型推論をできるようにした。これによりboost::apply_visitorでgeneric lambdasを使用することができるようになる。

  auto str = boost::apply_visitor(
      [](auto v) {
          return boost::lexical_cast<std::string>(v);
      },
      variant_instance
  );

テスト済みコンパイラ

主要なテストコンパイラ:

  • Linux:
    • Clang: 3.4
    • Clang, C++14: 3.5, 3.6
    • GCC: 4.4.7, 4.9.2
    • GCC, C++98: 4.8.1, 4.8.2
    • GCC, C++11: 4.4.7, 4.8.4, 4.9.2
    • GCC, C++14: 4.9.2
  • Windows:
    • GCC, mingw: 4.4.7, 4.5.4, 4.6.3, 4.7.3, 4.8.2
    • Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0
  • FreeBSD:
    • GCC: 4.2.1
  • QNX:
    • QCC: 4.4.2

追加して含まれるテストコンパイラ:

  • Linux:
    • Clang: 3.0, 3.1, 3.2, 3.3, 3.4
    • Clang, C++14: 3.5, 3.6
    • GCC: 4.4.7, 4.6.4, 4.7.3, 4.8.1, 4.9.2, 5.0.0 (experimental)
    • GCC, C++11: 4.4.7, 4.8.4, 4.9.2
    • GCC, C++14: 4.9.2
  • Windows:
    • GCC, mingw: 4.4.7, 4.5.4, 4.6.4, 4.7.3
    • Visual C++: 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
  • Android
    • Clang: 3.4, 3.5
    • GCC: 4.8, 4.9
  • FreeBSD:
    • GCC: 4.2.1
  • QNX:
    • QCC: 4.4.2

翻訳

Kohei Takahashi, Akira Takahashi