I don't think inline's relevant here, since both operands will always be evaluated in any case... with implementation-defined order so $Deity help you if they have side-effects :-)
In addition there's a constant hardwired inside the compiler and if a function is larger than that then an associated inline directive will be ignored (except for a warning message). I'm confident that the core developers had good reason for doing it that way, and I don't know what would happen if somebody recompiled his copy of the compiler with that constant changed.
FPC's macros are actually quite useful since they may extend over multiple lines and nested macros are handled reliably. However since they have no provision for parameters I don't think they really help here unless you're able to contrive that the controlling expression and parameters are actually consistently-named variables/constants/etc.
As per my original posting and- in particular- the included link at least one core developer is sympathetic to inline if-then-else. OTOH he's resolutely opposed to adding parameters to macros, so all I we can do is cling to the hope that inline conditionals eventually get added in some form.
Finally, looking at this from an historical perspective, I've seen early compilers and their documentation make very heavy going of nested if-then-else statements. Now granted that doctrine is far clearer these days but I still feel that the more that can be done to localise conditional handling the better: if something is conditional within the scope of an *expression* I see no reason to add to the complexity of a program by adding *statements*. Furthermore, if statements need to be added then that implies that an lvalue assignee must be repeated, increasing the risk that subsequent maintenance will change something in one copy but not the other.
MarkMLl