Search code examples
delphidelphi-7delphi-xe

Sets in Delphi XE are not working the same way they worked in D7


I had this constants in a Delphi 7 program. They are not compiling under Delphi XE.

TYPE
  TSingleChar= AnsiChar;

CONST
  noData: TSingleChar= '.';
  Ambiguity= ['x'];
  DNA_Ambig= ['x', noData]+ Ambiguity;

[DCC Error] E2026 Constant expression expected.

  1. What was changed in XE that my old code does not compile?
  2. I suppose that the code, as it is, is interpreted as Unicode. Am I correct?

Solution

  • "Fix" it like this:

    TYPE
      TSingleChar= AnsiChar;
    
    CONST
      Const_noData = '.';
      noData: TSingleChar= Const_noData;
      Ambiguity= ['x'];
      DNA_Ambig= ['x', Const_noData]+ Ambiguity;
    

    The Const_noData is a true const as far as the compiler's concerned, allowing you to initialize both noData and DNA_Ambig using it. And you still respect the DRY principle, ie, there's only one definition for noData, the Const_noData.