Delphi weiß das schon, es gibt schließlich eine Rangfolge bei den Operatoren. Und genau die führt dazu, daß es zu der beschriebenen Fehlermeldung kommt.
Der Compiler sieht den Ausdruck so:
if ((not a) = (b xor c)) = d then ...
Wenn die benutzten Variablen nicht vom Typ Boolean sind, kann der Ausdruck nicht übersetzt werden. Ein boolescher Ausdruck (linke Seite) soll hier mit einem nicht-booleschen Ausdruck (rechte Seite) verglichen werden.
Also: lieber ein Klammerpaar zuviel setzen. Zumal es bei
BDS 2006 die Hervorhebung der Klammern gibt...
Gruß Hawkeye