Есть способ получить переменную bool не равную ни true, ни false. При этом разные компиляторы работают по-разному. В Microsoft 2005 в следующем фрагменте кода можно сравнивать переменную b c true или false, и мы зайдем в else (если мне не изменяет память). В gcc (точно в последних версиях) уже необходимо сравнивать с функцией bool g(), чтобы зайти в else.
Есть два вопроса:
1. Какое поведение должно быть по стандарту, может ли переменная типа bool быть не равна ни true, ни false?
2. Какое поведение в других компиляторах/версиях?
#include <stdio.h>
int f()
{
return 4;
}
bool g()
{
return true;
}
int main() {
//bool b = reinterpret_cast<bool (*)()>(f)();
bool b = ((bool (*)())f)();
if (b == g()) // b == true
{
printf("true");
}
else if (b == !g()) // b == false
{
printf("false");
}
else
{
printf("bool is not equal to true or false");
}
return 0;
}
P.S. Аналогичная ситуация с языком C и типом _Bool, не равным ни 1, ни 0.