with Ada.Text_IO;
use Ada.Text_IO;

procedure Demo is

	subtype Predicated_Integer is Integer with Static_Predicate => Predicated_Integer in 3 | 5 | 7 | 11; --This is the type we will incorrectly initialize. Note that the static predicate dictates what correct values are. Attempting to assign to a value that isn't one of these will throw an exception. There are however initializion rules which never took this into consideration.

	type Record_Type is record
		Value : Predicated_Integer; --Here we're saying there's a record field of the type we just defined, and to use it's default initialization (since we didn't hard code a default value).
	end record;

	R : Record_Type := (others => <>); --Here we're saying to intialize the record with its default values. This supressess the error about reading a variable that was never assigned, thereby making the problem silent. Credit to Adam Ward for pointing out that if this is made constant, you have a permanently frozen invalid value, and can't ever make it valid.
begin
	Put_Line("Predicated_Integer intialized with " & Integer'Image(R.Value)); --You will get the default initialization value, which is typically 0 unless you set it otherwise or your platform has unique rules.
end Demo;