2 -- { dg-options "-gnat2020" }
4 procedure Delta_Aggr
is
5 type T1
is tagged record
6 F1
, F2
, F3
: Integer := 0;
9 function Make
(X
: Integer) return T1
is
15 type T2
is new T1
with private;
17 function Make
(X
: Integer) return T2
;
19 type T2
is new T1
with
23 X
: constant T2
:= (0, 0, 0, 0);
24 Y
: constant T2
:= (1, 2, 0, 0);
28 function Make
(X
: Integer) return T2
is
30 return (X
, X
** 2, X
** 3, X
** 4);
36 Z
: T2
:= (Y
with delta F1
=> 111);
38 -- a legal delta aggregate whose type is a private extension
39 pragma Assert
(Y
= (X
with delta F1
=> 1, F2
=> 2));
40 pragma assert
(Y
.F2
= X
.F1
);
43 Z
:= (X
with delta F1
=> 1);
45 -- The base of the delta aggregate can be overloaded, in which case
46 -- the candidate interpretations for the aggregate are those of the
47 -- base, to be resolved from context.
49 Z
:= (Make
(2) with delta F1
=> 1);