Я читаю утверждение времени компиляции, после поиска в Интернете я получил код, который я не понял.
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)
Но у меня не было идеи. Может кто-нибудь помочь мне разобраться в приведенном выше фрагменте кода. Второй запутался в этом фрагменте кода
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
#Define заменит COMPILE_ASSERT (expr, msg) указанным выше выражением. Но как msg [bool (expr)? 1: -1] альтернативный тип для CompileAssert ‹(bool (expr))>.
Пожалуйста, объясните подробно и просто. У меня много много вопросов.
Например, почему сообщение (PassRefPtr_should_ Never_be_assigned_to) работает без использования "" для char *