Michael Van Canneyt wrote:

You are wrong. It does not compile, neither in delphi, nor in FPC.
D is not found, because 'A' resolves to the local a, and then the search is stopped.

Ok, I think I got it. It's probably the same reason why in

---
procedure Foo (const A : My_Type); overload;
procedure Foo (const B : Some_Type); overload;

procedure Bar;
var
   A : My_Type;
   B : Some_Type;
begin
   Foo (A); // works
   Foo (B); // works
end;

procedure Foobar;
   // declare "Another_Type" locally
   procedure Foo (const C : Another_Type); begin ... end;

var
   A : My_Type;
   C : Another_Type;

begin
   Foo (C); // works
   Foo (A); // wrong type!
end;
---

the last call does not work (unless I write "unitname.Foo (A)" there).

BTW, the same happens with overloaded methods in classes when I try to extend the class: The overloaded methods of the parent class are suddenly not available anymore once I declare another overloaded method. This actually happened to me when I tried to extend the XMLConfig class for "Double" types. Once I declared "SetValue (Double)" in the derived class, I would have needed typecasts to access "SetValue (Integer)" and "SetValue (String)" in virtually every call. The other solution would have been to redeclare the overloaded methods in the derived class, I guess.

Well, writing about all that, I come to the conclusion that the Pascal scoping rules can really suck from time to time. ;) No plan to change that, though, I suppose?


Vinzent.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to