にゃははー

はへらー

Boost.Configぅぅぅぅぅぅぅぅぅっぅ

Boost.ConfigにはBOOST_NO_*といったコンパイラ対応等に関するマクロがありますが、これには問題があります。
例えば

#include <boost/config.hpp>

void hogehoge()
#if !defined( BOOST_NO_NOEXCEPT )
	noexcept
#endif
{
	fugafuga ...
}

のようなソースを書いたとき、BOOST_NO_NOEXCEPT*1は1.46.1にはありません。つまり現状trunkを使用しない限り常にnoexceptが付与され、つまり極稀なケースを除いてコンパイルエラーになります。
正しくは

#include <boost/version.hpp>
#if BOOST_VERSION >= 104700 && !defined( BOOST_NO_NOEXCEPT )

となります。

こんなのユーザーに要求するんですか?いちいちどのマクロがどのバージョンで定義されるか覚えろと?
メンド臭い以上にナンセンスですね。Boost.Configはバージョン依存を軽減するためのライブラリなのにそれ自体がバージョン依存というのはおかしい限りです。
#if 0
但し、boost.orgにその旨を言うと即刻潰されます。「Boost.Configはinternal onlyなのでそんなこと知らん」と言われます。
internal onlyならドキュメントにそう書けよとか言いたくなりますが、英語が不自由なので黙ります。あと、書かれると使えなくなるので言いません。言ってはいけません。
#endif

そこで私はTrance.Configにつれづれなるままに書いています。
https://github.com/Flast/trance/blob/master/trance/config.hpp

と言ってもバージョンが調べられてるのはnoexceptだけですが。
今後いろいろ書いてく予定なので、もしあれ入れろこれ入れろとかあったらtwitterでもメールでも言ってください。(バージョンとかしらべやがってくださりやがるとうれしいです。

但し具体的にどのコンパイラで対応したとかは直接boost.orgにBOOST_NO_〜が必要だと言ってください。
私はBoost.Configを使いやすくしたものだけ提供します。

#if 0
だれかテスト書いてくださいドキュメント書いてくださいgithubwiki書いてください
#endif

*1:@SubaruGさんに感謝!!