Вопрос к разработчикам - глюки или недокументированные баги с типом переменных?

[Удален]  

Доброго времени суток!

Господа, объясните плиз почему следующая провокация не вызавает никаких ошибок ни при компилляции ни при тестировании.

int Somefunc() //создаем функцию типа INT
{
return(-50); //которая возвращает -50
}
int start()
{
bool error; //В переменную типа BOOL передаем значение типа INT (-50)
error=Somefunc(); //
if (error==true) Print("ERROR!"); //условие не срабатывает
if (error==false) Print("NotError!"); //условие не срабатывает
if (error!=true && error!=false) Print(error); //сработало с возвратом -50
return(0);
}

Или вот така провокация:


int Somefunc() //создаем функцию типа INT
{
return(-50.500); /которая возвращает -50.500
}
int start()
{
bool error;
error=Somefunc(); //В переменную типа BOOL передаем значение типа DOUBLE(-50.500)
if (error==true) Print("ERROR!"); //условие не срабатывает
if (error==false) Print("NotError!"); //условие не срабатывает
if (error!=true && error!=false) Print(error); //сработало с возвратом -50.500
return(0);
}




По какой причине ЯВНОЕ нарушение совместимости типов не дает никаких ошибок? (по крайней мере на компиляторе и тестере). Или это так называемое расширение (приведение типа) типа до совместимого значения. Но зачем тогда разделять INT, DOUBLE и BOOL если они так легко преобразуюся друг в друга, не вызывая при этом ошибок?

P.S. Чтоб у вас все было и вам за это ничего не было.

 
Используется неявное приведение, да, но, все равно, бага, похоже. bool, получается, может быть не true и не false.
 

вероятно справку следует читать БУКВАЛЬНО:

Логические константы имеют значение true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно. Могут использоваться написания True, TRUE, False и FALSE.

Примеры:

bool a = true;
bool b = false;
bool c = 1;

Внутреннее представление - длинное целое число размером 4 байта. Логические константы могут принимать значения 0 и 1.

т.е. получается внутри четырех байт может лежать все что угодно, но только 0 и 1 распознаются как "истинно правильные"(?) логические значения.