| package Discr20 is |
| |
| Size : Integer; |
| |
| type Name is new String (1..Size); |
| |
| type Rec is record |
| It : Name; |
| end record; |
| |
| type Danger is (This, That); |
| type def (X : Danger := This) is record |
| case X is |
| when This => It : Rec; |
| when That => null; |
| end case; |
| end record; |
| |
| type Switch is (On, Off); |
| type Wrapper (Disc : Switch := On) is private; |
| function Get (X : Wrapper) return Def; |
| |
| private |
| type Wrapper (Disc : Switch := On) is record |
| Case Disc is |
| when On => It : Def; |
| when Off => null; |
| end case; |
| end record; |
| |
| end Discr20; |