В моей реализации C ++ (реализация Visual Studio 2008) я вижу следующую строку в
#ifdef NDEBUG
#define assert(_Expression) ((void)0)
Я не понимаю необходимости преобразовывать 0 в void. Мне кажется, что
#ifdef NDEBUG
#define assert(_Expression) (0)
или даже просто
#ifdef NDEBUG
#define assert(_Expression) 0
подойдет, учитывая контексты, в которых может использоваться assert (expr)
.
Итак, в чем опасность 0 типа ] int вместо 0 типа void в этом случае? Есть какие-нибудь реалистичные примеры?