Change your type definition to have a default descriminant: type Parameter_Definition(Param_Type:T_Param_Type:=Int) is record ... You'll also find that to assign to one of the elements in the array, you need to do a full record assignment to establish the type. Once the type is set you can manipulate individual field values if needed. Steve (The Duck) "Bj�rn Persson" wrote in message news:pIw0c.84623$dP1.233768@newsc.telia.net... I need an array type that can hold elements of different types. My current attempt (somewhat simplified) is below. My question is, is there a way to do this without pointers? type T_Param_Type is (Int, Str); type Parameter_Definition(Param_Type : T_Param_Type) is record Name : A_Bounded_String_Type; case Param_Type is when Int => Min : Integer; Max : Integer; Int_Value : Integer; when Str => Str_Value : Ada.Strings.Unbounded.Unbounded_String; end case; end record; type Parameter_Definition_Pointer is access Parameter_Definition; type Parameter_Spec is array(Positive range <>) of Parameter_Definition_Pointer; "array(Positive range <>) of Parameter_Definition" gave me the error "unconstrained element type in array declaration". I also tried a tagged type with subtypes and "array(Positive range <>) of Parameter_Definition'Class", and got the same error. This isn't really a dynamic data structure so I feel that pointers shouldn't be necessary. Any ideas? -- Bj�rn Persson jor ers @sv ge. b n_p son eri nu