Да! Есть даже в безопасном контексте! (Ну, его реализация определена как неопределенная, по крайней мере)
Вот одна из работ Марека Сафара и В.С.адова в Рослине . Существует несоответствие между C # и CLI в отношении bool
C # считает, что существует только один вид true
и один вид false
.
CLI считает, что false
- это байт, содержащий 0, а все остальные значения true
.
Это несоответствие означает, что мы можем заставить C # сделать некоторые (незначительно) интересные вещи вещь:
//non-standard bool
//We're setting a bool's value to a byte value of 5.
var a = new bool[1];
Buffer.SetByte(a, 0, 5);
//non-standard bool
//We're setting a bool's value to a byte value of 10.
var b = new bool[1];
Buffer.SetByte(b, 0, 10);
//Both are true.
Console.WriteLine(a[0]);
Console.WriteLine(b[0]);
//But they are not the same true.
Console.WriteLine(a[0] == b[0]);
Вышеуказанные выходы:
true
true
false
Интересно, что отладчик не согласен (должен по-другому оценивать истину?)
В любом случае, команда C # пришла к выводу (выделение добавлено):
т.е. язык останется совершенно безразличным к нестандартным bools. Конкретная реализация (как в MS C # на CIL) будет признавать существование нестандартных bools и определять их поведение как undefined