"Markus Schöpflin" wrote in message news:55C8B334.2010102@spam.spam... ... > I still don't get it: I would have expected the objects FOO and > FOO_PTR.all to be identical in behaviour. You would have been wrong. >Why is "new RECORD_T" creating a > constrained record and just using "RECORD_T" not? Because that's what Ada 83 specified and it is incompatible to change it. It's known to be stupid, but even a talented a designer as Jean Ichbiah was will make some mistakes. I'm not certain as to why Ada 83 adopted that model, probably you'd have to look in the Rationale. Anyway, every Ada programmer knows (or soon will find out) that one has to make mutable discriminated records components (never a top-level object) when allocated. There are a lot of records like: type Record_Wrapper_T is record C : Record_T; end record; (Note that this is why the restriction is stupid, one can easily cause whatever complications were supposedly being eliminated by using a component.) Anyway, the rule in question is 4.8(6/3), and the technical term is "constrained by its initial value". It's the same mechanism that is used if Record_T had been indefinite (had no default discriminant value). Note that we created a "hole" in this rule for completions of (constrainted) private types, else there was a practical privacy breakage (some assignments might fail for no good reason from the clients perspective). That was controversal, and its unlikely we'd ever go further. Randy.