本家リリースノート:
- https://github.com/boostorg/website/blob/master/feed/history/boost_1_60_0.qbk
- http://www.boost.org/users/history/version_1_60_0.html
リポジトリは以下:
リポジトリからのビルド方法は、egtraさんのブログを参照:
Hanaのリリースは延期
時間的な制約により、Hanaのリリースは、Boostの以降のリリースに延期となった。
これによって、HanaがBoostの一部として正式にリリースする前に、いくつかの既知の問題に対処できる。詳細はメーリングリストを参照。
http://article.gmane.org/gmane.comp.lib.boost.devel/263964
Boost.DLLのリリースは延期
めずらしいツールセットとプラットフォームのサポートを提供するために、Boost.DLLのリリースは、Boostの以降のリリースに延期となった。
これによって、boost::dll::shared_library
インスタンスのコピー構築とコピー代入の機能も追加されてより良いテストができるようになり、非デフォルトの呼び出し規約の関数をインポートするサンプルも提供される。
このライブラリの最新バージョンと開発ドキュメントは、以下のリポジトリにある:
Windowsユーザーへの注記
このリリースでのBoostは、コンパイラが最新のWindows SDKをサポートしていてWindows XP以外の場合に、Windows Vista/Windows Server 2008をデフォルトコンパイルとする。古いバージョンのWindowsでは、デフォルトのオプションでコンパイルされたバイナリを実行できなくなる。
Windows APIのバージョン番号をBOOST_USE_WINAPI_VERSION
マクロを定義することによって、対象のWindowsバージョンを明示的に指定することもできる。たとえば、Windows XP向けにBoostをコンパイルするには、次のコマンドを使用する:
b2 release define=BOOST_USE_WINAPI_VERSION=0x0501
Windows APIのバージョン番号の一覧は、以下のページで確認できる:
この変更は、BoostのWindows APIに対する抽象レイヤーを使用しているライブラリだけに影響する。現在は、以下のライブラリが対象である: Boost.Chrono、Boost.Dll、Boost.Log、Boost.UUID。これらのライブラリに依存するライブラリも対象となる。
新ライブラリ
- VMD
- 可変引数マクロデータライブラリ(Variadic Macro Data Library)
- 作者 : Edward Diener
更新ライブラリ
- Atomic
- Chrono
- Container
- Context
- Core
- Filesystem
- Flyweight
- Fusion
- Geometry
- Interprocess
- Intrusive
- Lexical-Cast
- Locale
- Log
- Move
- Multi-index
- Odeint
- Optional
- Predef
- Test
- Thread
- UUID
Atomic
atomic<>
のストレージに、適切なアラインメントを設定した。これによって、ネイティブのワードサイズより大きいデータ単位に対するアトミック操作のサポートに関する問題が修正される。- IBM XL C++コンパイラでのPowerPC向けのコンパイルエラーを修正。PowerPCアセンブラのメモリバリアを正しいものにした。
- MSVC-8でのARM向けのコンパイルエラーを修正。
- #10994 128ビットアトミック操作を使用したときの、gcc 4.4でのx86-64向けのコンパイルエラーを修正。
- x86/x86-64向けのgccアセンブラブロックを最適化し、使用するレジスタ数を減らした。これはbinutils 2.10以降を必要とする。
Chrono
バージョン2.0.5
バグ修正
- #10778 VC14 CTP4において、
boost::chrono
のduration
がTriviallyCopyable
ではないために、それを要素とするatomic
のコンパイルが通らない問題を修正 - #10840 test_7868.cppで、
puts()
関数の呼び出しがstd::
修飾されていない問題を修正 - #10851 time_point_output.cppで、
puts()
関数の呼び出しがstd::
修飾されていない問題を修正 - #10893 ドキュメントの誤字を修正
- #10992 ChronoのIO State Saverが、Boost.IO State Saverと異なるインタフェースだったのを修正。コンストラクタの第1パラメータを、
state_type
からstate_type&
に変更した - #10995
duration_put::put_value()
で、小数部が切り詰められる問題を修正 - #11006
time_fmt_io_saver
のコンパイルエラーを修正 - #11012 chrono_io v2で、
boost::chrono::duration < boost::rational <int>>
のコンパイルに失敗する問題を修正
Container
- 標準C++に提案されている、Polymorphic Memory Resourcesを実装した
BOOST_ASSERT
での事前条件のチェックを強化した(pop_back()
,pop_front()
,back()
,front()
、その他)basic_string
に、C++11のback()
とfront()
を追加- バグ修正
- Trac #11627
small_vector<T,n>::swap( )
が壊れていたので修正 - Trac #11628 要素のデストラクタを呼ぶ必要のない
small_vector<int,n>
で、要素のデストラクタが個別に呼び出されていたので修正 - Trac #11697 可変引数テンプレートのツールとして作成したタプルの初期化が、tail -> headの順になっていたので、head -> tailの順になるよう修正
- Trac #11698
static_storage_allocator
のreturn
文漏れを修正 - GitHub #29
flat_map
のドキュメントで、計算量が間違っていたので修正 - GitHub #31 dlmallocの実装で、アドレス取得がヌルチェックの中で行われていたために、アドレスを間接参照できない場合があったので修正
- Trac #11627
Context
- #11603 PPC32/MACH-Oアセンブラの誤字を修正
- Cygwinをサポート
Core
- シンボルのデマングルツールに、Android NDKのgabi++ ABIのサポートを追加
- 入れ子型の存在をSFINAEチェックするためのツールとして、
enable_if_has_type
を追加
Filesystem
新機能
-
以下の関数を追加した
-
path::lexically_normal()
: パスの正規化を行う。正規化では、冗長なカレントディレクトリ(ドット)の指定や親ディレクトリ(ドット-ドット)の削除を行う。例:assert(path("foo/./bar/..").lexically_normal() == "foo"); assert(path("foo/.///bar/../").lexically_normal() == "foo/.");
-
path::lexically_relative()
: パラメータで指定されたパスから*this
のパスへの相対パスを求める。例:assert(path("/a/d").lexically_relative("/a/b/c") == "../../d"); assert(path("/a/b/c").lexically_relative("/a/d") == "../b/c"); assert(path("a/b/c").lexically_relative("a") == "b/c"); assert(path("a/b/c").lexically_relative("a/b/c/x/y") == "../.."); assert(path("a/b/c").lexically_relative("a/b/c") == "."); assert(path("a/b").lexically_relative("c/d") == "");
-
relative()
: 第2パラメータのパスから第1パラメータのパスへの、相対パスを求める weakly_canonical()
: パラメータで指定されたパスのシンボリックリンクを解決し、正規化した結果のパスを返す- 上記4関数の追加で協力してくれたJamie Allsop氏に、多大な感謝をする
- これによって解決したチケットは以下: #1976, #5897, #6249
-
-
path
クラスに、reverse_iterator
とconst_reverse_iterator
型を追加し、rbegin()
、rend()
メンバ関数を追加した - Filesystem TSによって規定された、C++11の
noexcept
を付加(コンパイラがnoexcept
をサポートしていれば) - Filesystem TSによって規定された、C++11のムーブコンストラクタとムーブ代入演算子を追加(コンパイラがムーブをサポートしていれば)
- Filesystem TSの規定に従って、関数の名前をいくつか変更した。現在は、古い名前と新しい名前、両方をサポートしている。
path
クラスにsize()
メンバ関数を追加(#6874)
チケット
- #11733 boost/libs/filesystem/src/unique_path.cppでのunistd.hのインクルード漏れを修正。Idar Tollefsen氏によるパッチを適用した
- #5706 WindowsのTemporary User Profilesで
unique_path()
が失敗する問題を修正。Sebastian Redl氏によるpull requestを適用した(pull request #15) - #10591 このライブラリを、iOS 8でビルドできない問題を修正。Daniel Seither氏のパッチを適用した
- #9454
BOOST_FILESYSTEM_NO_DEPRECATED
がdefineされていると、このライブラリをビルドできない問題を修正。Makesim氏のパッチを適用した - #11447
__OpenBSD__
マクロ名が間違っていたのを修正。Jasper Lievisse Adriaanse氏のパッチを適用した - #11288 文字列の冗長なメモリ確保を回避した。Yevhen Ivannikov氏のパッチを適用した
- #11175 古いドキュメントが原因で、このライブラリが例外を無効にして使用できるとユーザーに期待させてしまっていた
- #11166
remove()
関数の、競合の可能性を減らした - #7258
create_directories()
関数に指定されたパスの最後がスラッシュの場合に、false
を返してしまっていたので修正。それにともなって、パスに「.
」もしくは「..
」が含まれていた場合のテストを追加 - #10766 冗長な区切り文字が付いたパスに対して
parent_path()
を呼び出すと、間違った値が返されていたという問題が報告されたが、これは動作としては正しかったので、ドキュメントにその動作を記載した - #7607 スラッシュで終わるパスのファイル名が「
.
」であると推論される問題。この問題は、#7258と#10766で解決した - #11061, #11062 パスを逆順に辿ることができないという問題だが、これはreverse iterator機能の追加によって解決した
その他修正
- GCCのいくつかの警告を修正
file_status
とrecursive_directory_iterator
のバグを修正 : 1引数以外のコンストラクタを非explicit
にした- リファレンスドキュメントを整理した : 残りのドキュメントにも、同じスタイルシートを適用した。タブのフォントサイズを調整した。テーブル内の長すぎる行を修正した
- Jonathan Wakely氏とMarcel Raad氏からのpull requestを含む、小さい修正を行った。
Flyweight
- メンテナンス上の修正を行った
Fusion
- 全てのFusionコンテナとジェネレータはC++11の可変長テンプレートをサポートした。(pull-request 89, pull-request 97, pull-request 100)
fusion::vector
に関する注意- 実装上の理由により、番号付きのvector(つまり
fusion::vectorN
の形)はC++11のエイリアステンプレートを使って提供され、C++11以降ではdeprecatedとなる。 この場合、いくつかの部分特殊化がコンパイルエラーとなる為、BOOST_FUSION_HAS_VARIADIC_VECTOR
マクロを使用して実装を切り替えなければならない(Spiritへのpull requestを参照されたい)。
- 実装上の理由により、番号付きのvector(つまり
fusion::nview
はC++11の可変長テンプレートをサポートした。(pull-request 90)fusion::fold
がSFINAE-friendlyとなった。(pull-request 102)- バグ修正
Geometry
解決したチケット
- #10803
union_()
アルゴリズムが、不正なジオメトリを返す問題を修正 - #11522
traits::detail
名前空間のbuffer
が名前衝突していたので修正 - #11533
rtree
の最小要素数が1の場合にremove()
関数を呼び出すと、アサートに失敗する問題を修正 - #11607
geometry::exception::what()
がprivate
になっていたので、public
に修正 - #11709
is_simple()
でセグメンテーション違反が発生する問題を修正 - #11710
is_simple()
に空のジオメトリを与えるとセグメンテーション違反が発生していたので、true
を返すよう修正 - #11711
is_simple()
とis_valid()
に、NaNやInfinityを含むジオメトリを与えてもtrue
が返ってきていたので、false
を返すよう修正
バグ修正
- ほかのポリゴンにtouchする部分の、interior ringとexterior ringのコロケーション(colocations)を修正
- 空の
rtree
に対してremove()
関数を呼び出した際に、アサート失敗するのではなく、何もせずに0
を返すよう修正 - 空のジオメトリをひとつだけ含むmulti geometriesに対する
centroid()
の呼び出しによって、セグメンテーション違反が発生する問題を修正(Jiri Drbalek氏に感謝) - 整数座標系の
liang_barsky
strategyを修正(Dane Springmeyer氏に感謝)
Interprocess
offset_ptr
のパフォーマンスを改善し、あらゆる未定義動作を削除した。異なるコンパイラでの特殊ケースが必要なくなった。- バグ修正
- Trac #11699 Visual Studio 2015のバグにより、標準クラステンプレートの先行宣言がコンパイルエラーになっていたので、ワークアラウンドを追加
Intrusive
- 順序付き連想コンテナでの「高度な検索と挿入」に、比較関数のサポートを追加した。
key_compare
と同じ「狭義の弱順序(strict weak ordering)」を提供することなしに、比較関数オブジェクトでコンテナを分割できる。 - バグ修正
- Boost Trac #11701
boost::intrusive::set::equal_range
のレギュレッション - Boost Trac #11765 sgtreeのテストコードが不正だったので修正
- Boost Trac #11701
Lexical Cast
- ムーブのみできる型を使用することができなくなっていたのを修正 #11570
BOOST_LCAST_NO_COMPILE_TIME_PRECISION
が定義されていた際にクラッシュしていたのを修正 #11669- #11570と#4946で指摘されていた幾つかの警告を修正
Locale
- ジェネリックな
codecvt
ファセットと、汎用的な目的に使用できるutf8_codecvt
ファセットを実装した - FreeBSD 10.0と上記の機能向けに、POSIXのロケールをサポートした
- バグ修正
- いくつかの警告を修正
- 最新のICUバージョンでのテストを修正
- libc++の問題へのワークアラウンドを追加
- 新たなマクロ
BOOST_LOCALE_ENABLE_CHAR16_T
とBOOST_LOCALE_ENABLE_CHAR32_T
を追加。これは、C++11が有効であればchar16_t
とchar32_t
に置き換えられる。
Log
全体的な変更
- Windows環境で、構成マクロ
BOOST_LOG_USE_WINNT6_API
は使われなくなる。ターゲット環境を設定するマクロBOOST_USE_WINAPI_VERSION
を定義することによって、Windowsのバージョンを設定する必要がある。
バグ修正
- #11559 AndroidでのGoogle NDKのコンパイルエラーを修正
- #11549 ロギング文のいくつかのコンパイルエラーを修正。ストリームに入れる最初のオブジェクトは、
formatting_ostream
がサポートされていなかった - #11549 Solaris Studio 12.4向けのワークアラウンドを追加。
formatting_ostream
のコンパイルエラーが修正される - #11541 ネイティブの
wchar_t
を無効にしたときのコンパイルエラーを修正 - POSIXライクシステム上での、
boost_log_setup
ライブラリからのエクスポートシンボルを修正 - character decoratorsのコンパイルエラーを修正
- #11691 ファイル名にdate/timeのプレースホルダが含まれている場合に、text file sink backendで不正なファイル名であると判定される問題に対するワークアラウンドを追加
さらなる詳細は、changelogを参照。
Move
- バグ修正 #11615: type_traits.hppで
std::size_t
を完全修飾せず使っている場所があったので修正- 訳者註:
<cstddef>
ヘッダをインクルードしてもグローバル名前空間にsize_t
が存在するとは限らない為、一部の標準ライブラリ実装ではコンパイルできない問題があった
- 訳者註:
Multi-index
- オプショナルな定義である
foreach
マクロ名による、Qtフレームワークとの相互運用の問題を修正 - メンテナンス上の修正を行った
Odeint
- 新機能
- あまりにも多くのODEステップが実行された場合に、例外を送出する機能を追加
- アダプティブ法(adaptive method)の最大ステップサイズを制限する機能を追加
- いくつかのバグを修正 : https://github.com/headmyshoulder/odeint-v2/issues
- 訳注 : どのバージョンでなにが直ったのかわからなかったので、バグ修正の詳細は記載しない
Optional
- #11203
boost::none
の実装を再度変更した。内部リンケージのconst
オブジェクトとした。
Predef
バージョン1.4
- SIMDハードウェアの検出機能を追加。
BOOST_HW_*
マクロを使用する(Charly Chevalier氏に感謝) - クロスコンパイルのチェックを行うための、コンパイルのみ行うユーティリティを追加
- テストの警告を修正
- Windowsプラットフォームの、
AVAILABLE
マクロの誤字を修正(Vemund Handeland氏に感謝)
Test
バージョン3.1
新機能
- コマンドラインのインタフェースを改善
- データセットのAPIを改善 : データセットの生成に初期化子リストを使用できるようにし、データセットの構築をより容易にした
バグ修正とリクエスト
- #3384, #6032, #10317 ダブルクォーテーションで囲まれた引数が、スペースで分割されてしまう問題を修正
- #6859 コマンドラインの、最後の空パラメータが無視される問題を修正
- #11279 不正なパラメータを渡した際に、それが報告されない問題を修正
- #11478 アサーションの失敗で送出される例外のメッセージが固定文言のため、原因がわからなかったので修正
- #11571, #11625
BOOST_TEST( ..., per_element() )
で、コンテナの比較ができない問題を修正 - #11623 Clangで
BOOST_TEST()
のコンパイルが通らない問題を修正 - #11624 C++11モードのGCCとClangで、
BOOST_TEST( 0.0 == 0.0 )
というテストが失敗する問題を修正
Thread
バージョン4.6.0
実験的な新機能
- #11231
future
のデストラクタをブロッキングしないよう設定する機能を追加。BOOST_THREAD_FUTURE_BLOCKING
をdefineする - #11424
shared_mutex
の名前変更としてshared_timed_mutex
を提供し、元のtimed mutex機能付きのshared_mutex
を非推奨とした - #11734
future::then(Cont)
を、可能であればスレッドを引き継いで実行するようにした - #11736
launch::executor
をfuture::then(launch::executor, cont)
のように使用できるようにした - #11737
launch::inherit
ポリシーを追加した。これを使用することにより、親のthen()
で指定されたポリシーを引き継げるようにした
バグ修正
- #3926
thread_specific_ptr
とdlopenライブラリの組み合わせでセグメンテーションフォルトとなる問題を修正 - #6377 時間が変更されると条件変数がブロックする問題を修正
- #6787 システム時間が逆行すると、
boost::thread::sleep()
がハングする問題を修正 - #7665
this_thread::sleep_for()
がsteady_clock
を使用していなかったので修正 - #7720
mutex
の集中的なロック取得/解除でlock_error
例外が送出される問題を修正 - #9309 clang-darwin-tot11環境で、test_latchがたまに失敗する問題を修正
- #10788
GetLogicalProcessor
が、Windowsプラットフォームの0x0502
以下では使用できなかったので修正 - #11090 ex_future_unwrapが、ThreadSanitizerによると、ロック取得の順番によってデッドロックする可能性があったので修正
- #11158 pthreadのスレッドが、faketimeを使用するとデッドロックする問題を修正
- #11174
boost::condition_variable::timed_wait()
で無限に待つと、述語が突然起床することがある問題を修正 - #11185 ドキュメントのURLリダイレクトが間違っていたので修正
- #11192
boost::future::then()
とexecutor
を組み合わせると、コンパイルが通らない問題を修正 - #11250
make_exceptional()
で作ったfuture
オブジェクトが、そのデストラクタでアサーション失敗していたので修正 - #11256 継続関数内で
future<>::is_ready() == false
となる問題を修正 - #11261
basic_thread_pool
内でスコープ付きスレッドの使い方が間違っていたので修正 - #11262
shared_state_nullary_task
内で直接的なポインタの使い方が間違っていたので修正 - #11263 いくつかのアンロック操作が不足していたために、
lock()
関数で「すれにロックされている」という例外が発生する問題を修正 - #11266
boost::packaged_task
クラスの可変引数シグニチャが間違っていたので修正 - #11302
BOOST_THREAD_PATCH
をdefineするとビルドが通らなかったので修正 - #11322
sleep_for()
のナノ秒オーバーロードを使用すると、Windows上で返ってくるのが早すぎる問題を修正 - #11329
GetProcessHeap()
のusingディレクティブが失敗する問題を修正 - #11368 sleep操作で起床しない問題を修正
- #11377 pthread環境上でシステム時間を変更すると、条件変数が永遠に待ってしまう問題を修正
- #11435 future.hppの、GCCでの警告を修正
- #11555 devector.hppが、
allocator_traits_type
の存在を前提としていたので修正 - #11562 タイマー起動後にシステム時間を設定すると、タイマーがすぐに切れる問題を修正
- #11672 内部実装で、
auto_ptr
の代わりにunique_ptr
を使用するようにした - #11688
thread::try_join_until()
で、システム時間が変更された場合のbusy waitを待機 - #11716
then()
が、親のexecutorを引き継ぐようにした
UUID
- UUIDを比較する際にクラッシュを引き起こす可能性のあるMSVC codegenのバグに対する、ワークアラウンドを追加
- MSVCのコンパイラスイッチを使って、AVXが有効かどうかを検出できるようにした
テスト済みコンパイラ
主要なテストコンパイラ:
- Linux:
- Clang: 3.4, 3.6
- Clang, C++14: 3.7
- GCC: 4.4.7, 4.8.4, 4.9.3, 5.1.0, 5.2.1
- GCC, C++11: 4.4.7
- GCC, C++14: 4.9.3
- Windows:
- GCC, C++03, mingw: 3.4.5
- GCC, C++11, mingw: 4.6.4, 4.7.3, 4.8.1
- GCC, C++14, mingw: 4.9.3, 5.1.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android:
- Clang: 3.6, 3.7
- GCC: 4.9.0, 5.2.0
- QNX:
- QCC: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.4, 12.5
追加して含まれるテストコンパイラ:
- Linux:
- Clang: 3.0, 3.1, 3.2, 3.3, 3.4.2, 3.6.0, 3.8.0
- Clang, C++14: 3.7.0
- GCC: 4.4.7, 4.5.3, 4.6.4, 4.7.3, 4.8.1, 4.9.3, 5.1.0, 6.0.0
- GCC, C++11: 4.4.7
- GCC, C++14: 4.9.3, 5.2.1
- IBM XL C++: 13.1.2.0
- Intel: 16.0
- OS X:
- Clang: 7.0.0
- GCC: 5.2.0
- Windows:
- GCC, C++03, mingw: 3.4.5
- GCC, C++11, mingw: 4.7.3, 4.8.1
- GCC, C++14, mingw: 4.9.3, 5.1.0
- Visual C++: 7.1, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0
- Android:
- Clang: 3.6, 3.7
- GCC: 4.9.0, 5.2.0
- FreeBSD:
- Clang, C++11: 3.4.1, 3.7
- GCC, C++11: 4.8.5, 5.2.0, 6.0.0
- QNX:
- QCC: 4.4.2
- SunOS:
- Oracle Solaris Studio: 12.4, 12.5