{ View this in an editor with EP/BP/PXSC keyword highlighting. ;-}

program fjf804;

procedure uses; begin WriteLn ('OK') end;
procedure pow; begin WriteLn ('failed') end;

const
  shr = Ord (nil = nil);
  as = shr shl shr + shr;

type
  constructor = type of shr;
  destructor = type of as;

var
  implementation: constructor value as * as;
  is: type of shr value as shl as;
  unit: type of is value as shl as shl shr div as;

operator operator (only, otherwise: constructor) object: destructor;
var
  operator: constructor absolute only;
  absolute: constructor absolute otherwise;
begin
  object := operator xor absolute
end;

begin
  if implementation operator is = unit operator shr then uses else pow
end.
