Boolean vs Byte (or any other storage) is not a conflict.
it shouldn't be a conflict but, FPC equates boolean to bytebool, that's a problem and a conflict because a boolean isn't a byte. A boolean can only host 2 values, a byte can host 256 values, quite a difference.
What is downright atrocious is that FPC accepts a typecast such as boolean(73). It's atrocious because 73 cannot fit in 1 bit and anything that remotely resembles a compiler knows that and would reject that.
That's just one of the _many_ problems with what FPC _pretends_ is a boolean. Just taking the code from @ASerge, a boolean cannot index past 1 because it is limited to the values 0 and 1, yet in Serge's code a boolean is used as an index with the value 2. This is even beyond what they can do at Cirque du Soleil.
It doesn't help that the behavior flies in the face of what the documentation states. The documentation makes it very clear that a boolean is either zero or 1 and, it's quite obvious that is not the case. If it were the case Serge's code could not output "error".
Lastly, there is no amount of typecasting in the universe that can fit the value 72 (or any value greater than 1) in a single bit. Yet one more proof that what FPC implements is NOT the boolean type but a bytebool (which it pretends is a boolean... obviously, with a lot of help from its friends who defend that atrocity.)
Of course, when all that FPC nonsense is pushed to its limits and falls apart, that's undefined territory. I have to agree when something says that TRUE <> TRUE, that's definitely undefined territory and, it would have been very nice if it had also been never-discovered territory. Stuffing values greater than 1 in what is by definition a single bit is not only undefined territory but quite a "breakthrough" (writable constants v2.0).
Anyway... it's rather obvious that we'll never agree just as it is obvious that FPC does not implement the boolean type.