Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

BOOST_PP_ASSERT_MSG

タグ: C++ Boost

名前からして「第1引数が0なら第2引数をエラーメッセージとして表示する」ものだと思ったのだが、

#include <boost/preprocessor/debug/assert.hpp>
BOOST_PP_ASSERT_MSG(0, "hoge");

をビルドしても、VC8では

(2) : error C2059: 構文エラー : '文字列'

gcc4.0では

2: error: expected unqualified-id before string constant

と出るだけで、肝心の"hoge"は微塵も姿を見せない。
なぜだろうとヘッダ(Boost 1.38.0)を覗いてみると、

#define BOOST_PP_ASSERT_MSG BOOST_PP_ASSERT_MSG_D
#define BOOST_PP_ASSERT_MSG_D(cond, msg) BOOST_PP_EXPR_IIF(BOOST_PP_NOT(cond), msg)

とある。
つまりこのマクロ、今の実装は単に

#include <boost/preprocessor/debug/assert.hpp>
"hoge";

こう展開し、あとはコンパイラが空気を読んでエラーメッセージを生成してくれることを期待していると、そういうものらしい。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/180-d00760cc
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。