Consider the following snippet:
requires
designide,
rtl,
vcl,
{$IF RTLVersion < 19.0} // E2026 Constant expression expected
//{$IF CompilerVersion = 22.0} // same as above
vcljpg;
{$ELSE}
vclimg;
{$IFEND}
It seems to be absolutely syntactically correct. However, the compiler chokes on it and reports Constant expression expected
. What really happens here?
Technical: currently tested on XE (15.0.3953.35171) only.
Of course, workaround suggestions are welcome too.
I'm convinced what i just found the cause. Consider the following:
So, it appears to be what compiler behaves correctly, but issues a rather misleading (if not erroneous) message about symbol not being a constant expression, while symbol in question actually is undeclared!
package
modules are different fromprogram
andlibrary
modules. They do not contain executable code and you cannotuse
units. Therefore, symbols likeRTLVersion
are simply not visible from a package file. Your only option is to use$IFDEF
.I found the same issue in the past even with delphi 2007. As workaround, I use a inc file with the conditional defines and then use
{$IFDEF}
instead of{$IF}
something like so