vc crt のソース コードを読んでいると、次のコード スニペットが見つかりました。
/* Asserts */
/* We use !! below to ensure that any overloaded operators used to evaluate expr do not end up at operator || */
#define _ASSERT_EXPR(expr, msg) \
(void) ((!!(expr)) || \
(1 != _CrtDbgReportW(_CRT_ASSERT, _CRT_WIDE(__FILE__), __LINE__, NULL, L"%s", msg)) || \
(_CrtDbgBreak(), 0))
#ifndef _ASSERT
#define _ASSERT(expr) _ASSERT_EXPR((expr), NULL)
#endif
なぜ必要なのか理解できません!! 上記のマクロで . オーバーロードされた演算子が演算子 || になる可能性がある例を挙げていただけますか?