1with System;
2package Self is
3  type Lim is limited private;
4  type Lim_Ref is access all Lim;
5  function G (X : Integer) return lim;
6
7  procedure Change (X : in out Lim; Incr : Integer);
8  function Get (X : Lim) return Integer;
9private
10  type Lim is limited record
11     Comp : Integer;
12     Self_Default : Lim_Ref := Lim'Unchecked_Access;
13     Self_Unrestricted_Default : Lim_Ref := Lim'Unrestricted_Access;
14     Self_Anon_Default : access Lim := Lim'Unchecked_Access;
15     Self_Anon_Unrestricted_Default : access Lim := Lim'Unrestricted_Access;
16  end record;
17end Self;
18