Это мой код:
#include <cstring>
#include <iostream>
int main() {
    bool a;
    memset(&a, 0x03, sizeof(bool));
    if (a) {
        std::cout << "a is true!" << std::endl;
    }
    if (!a) {
        std::cout << "!a is true!" << std::endl;
    }
}
Он выводит:
a is true!
!a is true!
Кажется, что оператор ! на bool инвертирует только последний бит, но каждое значение, не равное 0, рассматривается как true. Это приводит к показанному поведению, которое логически неверно. Это ошибка в реализации, или это позволяет спецификация? Обратите внимание, что memset можно опустить, и поведение, вероятно, будет таким же, поскольку a содержит мусор памяти.
Я на gcc 4.4.5, другие компиляторы могут сделать это по-другому.