コンパイル時のアサートを読んでいます。オンラインで検索した後、理解できないコードがいくつかありました。
template <bool> struct CompileAssert {};
#define COMPILE_ASSERT(expr, msg) \
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
この COMPILE_ASSERT を以下のように使用しました。
COMPILE_ASSERT(!sizeof(T*), PassRefPtr_should_never_be_assigned_to)
しかし、私はアイデアを思いつきませんでした.誰かが上記のコードを理解するのを手伝ってくれますか. 2番目はこのコードで混乱しました
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
#define は COMPILE_ASSERT (expr, msg)を上記の expession に置き換えますが、どのようにmsg[bool(expr) ? 1 : -1] CompileAssert<(bool(expr))>の代替型。
誰か詳しくわかりやすく説明してください。たくさんの質問があります。
char * に "" を使用せずに message(PassRefPtr_should_never_be_assigned_to) が機能する理由のように