if same size is necessary, I would do it like this:

const
 topDataQword= 29;
 topNameChar= 231;

type
 Tfnord1 = array[0..topDataQword] of qword ;
 Tfnord2 = record
                      name: array[0..topNameChar] of char;
                      inode: qword
                    end ;
 Tfnord= record
            case boolean of
              false: (data: Tfnord1);
              true:  (ni : Tfnord2)
          end;

and, in the code:
 if sizeof(tfnord1) <> sizeof(tfnord2) then halt(4711);

or, in the data
type xxxxxxtest = array [ 1..ord(sizeof(tfnord1) = sizeof(tfnord2)) ] of boolean ;

----- Original Message ----- From: "Mark Morgan Lloyd" <markmll.fpc-pas...@telemetry.co.uk>
To: <fpc-pascal@lists.freepascal.org>
Sent: Sunday, August 07, 2016 6:11 PM
Subject: [fpc-pascal] Variant record consistency


Given a declaration

const
  topDataQword= 29;
  topNameChar= 231;

type
  Tfnord= record
            case boolean of
              false: (data: array[0..topDataQword] of qword);
              true:  (name: array[0..topNameChar] of char;
inode: qword) (* For recovery if name is changed *)
          end;

is it possible to enforce a rule that the two record variants must be the same size?

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to