[fpc-pascal] Primitive Record Wrappers

Mazola Winstrol mazofeifer at gmail.com
Tue Mar 1 04:08:00 CET 2016


2016-02-29 13:16 GMT-03:00 Sven Barth <pascaldragon at googlemail.com>:

> Am 29.02.2016 16:13 schrieb "Mazola Winstrol" <mazofeifer at gmail.com>:
> >
> > I have noticed that, by using generics, we can't overload arithmetic
> operators.
> >
> > E.g.:
> >
> > ...
> > class operator Negative(A: TNullableType<T>): T;
> > ...
> >
> > class operator TNullableType<T>.Negative(A: TNullableType<T>): T;
> > begin
> >     Result := -1 * A;
> > end;
> > ....
> >
> > wouldn't compile with the error "Operator not applicable to this operand
> type".
> >
> > Is there any workaround to overcome this?
>
> As far as I am concerned that *should* work. If it does not, then it's a
> bug. Please file a bug report with a simple example program.
>
> Regards,
> Sven
>
I apologize, it works.


There is a problem in my design. The code won't compile if i try to
specialize with a type which doesn'y supports arithmetic operators e.g
String types.


==== code ====

{$mode delphi}

  TNullableType<T> = record
  private
    FValue: T;
  public
    class operator Negative(A: TNullableType<T>): T;
  end;

  TString = TNullableType<String>;

.....

class operator TNullableType<T>.Negative(A: TNullableType<T>): T;
begin
  Result := -1 * A.FValue;
end;


=== code ====

Compilation error: "Operator is not overloaded: "ShortInt" * "AnsiString" ";


Is there any way to overcome this? Is there any way to tell the compiler to
ignore some operators depending on the specialization type?

Regards
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20160301/7af3a972/attachment.html>


More information about the fpc-pascal mailing list