Skip to content

Compiler ignores unit qualifier

Original Reporter info from Mantis: mazolawins
  • Reporter name: Mazolla Winstrol

Description:

The compiler doesn't correctly respect the unit qualifier when trying to use two types with the same name defined in diferent units (i'm using mode delphi).

Consider this unit

=== CODE ===

unit MyRecordDefinitionA;

{$mode delphi}

interface

type
  TMyRecord<T> = record
  public
    FValue: T;
    class operator Add(A,B: TMyRecord<T>): TMyRecord<T>;
  end;

implementation

class operator TMyRecord<T>.Add(A,B: TMyRecord<T>): TMyRecord<T>;
begin
  Result.FValue := A.FValue + B.FValue;
end;

end.

=== END ===

The unit above defines a generic type named TMyRecord with the arithmetic operator overloaded Add. This type is supposed to be specialized with a type parameter that supports the add operation (e.g Integer types).

=== CODE ===

unit MyRecordDefinitionB;

{$mode delphi}

interface

type
  TMyRecord<T> = record
  public
    FValue: T;
    class operator LogicalAnd(A: TMyRecord<T>; B: Boolean): TMyRecord<T>;
  end;

implementation

class operator TMyRecord<T>.LogicalAnd(A: TMyRecord<T>; B: Boolean): TMyRecord<T>;
begin
  Result.FValue := A.FValue and B;
end;

end.

=== END ===

The unit above defines a generic type named TMyRecord too, but with the logical operator overloading And. This type is supposed to be specialized with a type parameter that supports the logical and operation (e.g Boolean types).

=== CODE ===

unit MyRecordSpecialization;

{$mode delphi}

interface

uses
  MyRecordDefinitionA, MyRecordDefinitionB;

type
  TMyIntegerRecord = MyRecordDefinitionA.TMyRecord<Integer>;
  TMyBooleanRecord = MyRecordDefinitionB.TMyRecord<Boolean>;

implementation

end. 

=== END ===

The unit above defines two specialized types based on the generic type TMyRecord defined in the units MyRecordDefinitionA and MyRecordDefinitionB.

When i try to compile MyRecordSpecialization, i get this error: "Operator is not overloaded: LongInt and Boolean".

Mantis conversion info:

  • Mantis ID: 29859
  • Version: 3.0.0
  • Monitored by: » @zamtmn (Andrey Zubarev), » @OkobaPatino (OkobaPatino)
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information