program tw27185; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes { you can add units after this }; var NormalClassInit: Boolean = False; NormalClassDone: Boolean = False; NestedTypeClassInit: Boolean = False; NestedTypeClassDone: Boolean = False; NestedTypeClassNestedClassInit: Boolean = False; NestedTypeClassNestedClassDone: Boolean = False; Type { TNormalClass } TNormalClass = class public class constructor Create; class destructor Destroy; end; { TNestedTypeClass } TNestedTypeClass = class private type { TNestedClass } TNestedClass = class public class constructor Create; class destructor Destroy; end; public class constructor Create; class destructor Destroy; end; { TNestedTypeClass } class constructor TNestedTypeClass.Create; begin NestedTypeClassInit := True; //WriteLn('class constructor TNestedTypeClass.Create'); end; class destructor TNestedTypeClass.Destroy; begin NestedTypeClassDone := True; //WriteLn('class destructor TNestedTypeClass.Destroy'); end; { TNormalClass } class constructor TNormalClass.Create; begin NormalClassInit := True; //WriteLn('class constructor TNormalClass.Create'); end; class destructor TNormalClass.Destroy; begin NormalClassDone := False; //WriteLn('class destructor TNormalClass.Destroy'); end; { TNestedTypeClass.TNestedClass } class constructor TNestedTypeClass.TNestedClass.Create; begin NestedTypeClassNestedClassInit := True; //WriteLn('class constructor TNestedTypeClass.TNestedClass.Create'); end; class destructor TNestedTypeClass.TNestedClass.Destroy; begin NestedTypeClassNestedClassDone := True; //WriteLn('class destructor TNestedTypeClass.TNestedClass.Destroy'); end; begin if not NormalClassInit then Halt(1); if not NestedTypeClassInit then Halt(2); if not NestedTypeClassNestedClassInit then Halt(3); end.