Thanks, it is what I was expecting (where did you find the answer, in the RM95?). The example below is trying to synthesize your answer: -------------------------------------------------- with Ada.Finalization; package Instrum is type Instrum_Type is new Ada.Finalization.Controlled with record A : Integer; end record; procedure Finalize (O : in out Instrum_Type); procedure Adjust (O : in out Instrum_Type); procedure Initialize (O : in out Instrum_Type); J : Instrum.Instrum_Type := ( Ada.Finalization.Controlled with A=>0);--nothing : OK --J : Instrum.Instrum_Type; --raised PROGRAM_ERROR : access before elaboration : OK end Instrum; -------------------------------------------------- with Instrum, Ada.Finalization,Ada.Text_Io; procedure Test_Instrum is I : Instrum.Instrum_Type := Instrum.J; --adjust : OK --I : Instrum.Instrum_Type := ( ada.finalization.controlled with A=>0); --nothing : OK --I : Instrum.Instrum_Type; --initialize : OK begin Ada.Text_Io.Put_line("end;"); end Test_Instrum; "Matthew Heaney" a �crit dans le message de news: u8yo4imig.fsf@earthlink.net... > "Alex Xela" writes: > > > On the following code, what should happen during J variable elaboration? > > > > - Nothing > > > > - A call to Adjust. > > > > I tried to find the answer in RM95 but in vain. > > > > My tests on several compilers (and my feeling) were suggesting : nothing! > > Aggregate assignment is handled specially. For a controlled type, it > means the object must be built in place. > > Clearly, no controlled operations can be called, because they haven't > been elaboratated yet. Hence the special rule for aggregate assignment. > > > >