[fpc-pascal] Troubles with overloaded operators

Sven Barth pascaldragon at googlemail.com
Sat Oct 16 14:49:59 CEST 2010


Hi together!

I'm currently wrapping V4L2 in an object oriented way and thought that I 
could use operator overloading to convert flag ordinals to Pascal sets. 
My operator compiled without problems, but when I tried to use it I got 
a type error.

So I reduced my problem to a single test unit:

==== begin ====

program opoverload;

{$mode objfpc}

type
   TTest = (
     test1,
     test2,
     test3
   );
   TTests = set of TTest;

operator := (aRight: LongWord) aLeft: TTests;
begin
   Result := [];
   if (aRight >= 0) and (aRight < 21) then
     Include(Result, test1);
   if (aRight >= 21) and (aRight <= 42) then
     Include(Result, test2);
   if (aRight >= 0) and (aRight <= 42) then
     Include(Result, test3);
end;

var
   i: LongWord;
   t: TTests;
begin
   i := 21;
//  t := i;
end.

==== end ====

Compiling it as is succeeds without problems, but enabling the commented 
assignment to "t" results in the following output:

====
 > fpc opoverload.pasfpc opoverload.pas
Free Pascal Compiler version 2.4.0 [2010/01/01] for i386
Copyright (c) 1993-2009 by Florian Klaempfl
Target OS: Linux for i386
Compiling opoverload.pas
opoverload.pas(29,8) Error: Incompatible types: got "LongWord" expected 
"TTests"
opoverload.pas(31) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /home/sven/.bin/ppc386 returned an error exitcode (normal if you 
did not specify a source file to be compiled)
====

Is this a bug (I'm using 2.4.0, but I've tested it with a 2.5.1 from end 
of August as well)? Or is it not possible to use such an overload (which 
would be a pity...)?

Regards,
Sven



More information about the fpc-pascal mailing list