[fpc-pascal] Assigning a result of a method reference
Michael Van Canneyt
michael at freepascal.org
Sun Jun 24 00:51:54 CEST 2007
On Sat, 23 Jun 2007, Joao Morais wrote:
> Michael Van Canneyt wrote:
> >
> > On Sat, 23 Jun 2007, Joao Morais wrote:
> >
> > > Hello,
> > >
> > > Taking the following code:
> > >
> > > {$mode objfpc}{$h+}
> > > class function tfoo.classmetadata: string;
> > > var
> > > vmetadatamethod: function: string of object;
> > > begin
> > > vmetadatamethod := @internalmetadatastr;
> > > // more code
> > > Result := vmetadatamethod;
> > > end;
> > >
> > > the last assignment doesn't compile, the compiler complains that:
> > >
> > > Error: Incompatible types: got "<procedure variable type of
> > > function:AnsiString of object;Register>" expected "AnsiString"
> >
> > Try
> >
> > Result := vmetadatamethod();
>
> Nice idea, now it works. =) Thanks.
>
> > Strange code you have,
>
> An useful abstraction to ensure that an specific class implements an specific
> virtual method. If it doesn't implement, I need an empty string instead of the
> inherited value.
>
> > Your code does not even compile under Delphi...
>
> It compiles and works since (at least) D5 and under fpc's $mode delphi. In
> this case, the need of the brackets under objfpc can be considered a bug?
> Should I file a bug report?
No, it is normal in objfpc mode.
Michael.
More information about the fpc-pascal
mailing list