Возможный дубликат:
Двойное отрицание в коде С++
Скажем:
bool var = !!true;
Он присваивает переменную "true". Кажется бесполезным, но я смотрел на определение Visual Studio "assert", и это:
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
Почему это дважды отменяет "_Expression"?
Интересно, что они хотят заставить "!" вызываемый оператор (в случае перегрузки), но это, по-видимому, не является веской причиной.