anchor.diff:    Result := System.TypeInfo(T);
   end;
   
  +
   class function TSet<T>.IsSet: Boolean;
   begin
     Result := TypeInfo.Kind = tkSet;
   end;
   
  -function GetCardinality(const PSet: PByteArray; const SizeOfSet(*in bytes*): Integer): Integer; inline;
  +
  +class function TSet<T>.GetCardinality(const PSet: PByteArray; const SizeOfSet(*in bytes*): Integer): Integer;
   var
     I, J: Integer;
   begin
     Result := 0;
     for I := 0 to SizeOfSet - 1 do
       for J := 0 to 7 do
  -      if (PSet^[I] and Masks[J]) > 0 then
  +      if (PSet^[I] and BIT_MASKS[J]) > 0 then
           Inc(Result);
   end;
   
  
positive.code:   ERuntimeTypeError = class(Exception);
  
    TSet<T> = class
    strict private
      class function TypeInfo: PTypeInfo; inline; static;
      class function GetSetToString(const PSet: PByteArray; const SizeOfSet(*in bytes*): Integer): String; static;
    public
      class function IsSet: Boolean; static;
  
negative.code:   Result := '[' + Result + ']';
  end;
  
  
  class function TSet<T>.Cardinality(const Value: T): Integer;
  var
    EnumTypeData: PTypeData;
  