[fpc-pascal] private type and type compatibility

Sven Barth pascaldragon at googlemail.com
Wed Oct 30 15:00:41 CET 2013

Am 30.10.2013 14:37, schrieb Jonas Maebe:
> On 30 Oct 2013, at 14:30, Xiangrong Fang wrote:
>> 2013/10/30 Jonas Maebe <jonas.maebe at elis.ugent.be>
>>> The tdynarray type is not visible in the program because u1 is not 
>>> in its
>>> uses clause (it's not in scope whatsoever), and nevertheless there 
>>> is no
>>> problem to use it. It's of course not exactly the same (tdynarray isn't
>>> declared as private to u1), but at the scope visibility level it is the
>>> same situation as far as I am concerned.
>> ​I don't think they are the same.  tdynarray​
>> is not usable in main program because you did not uses u1, NOT 
>> because the
>> type is defined as PRIVATE!
> "Private" is just another way to define a scope, just like a unit 
> interface and implementation define a scope. Neither the "private" 
> section nor the interface of unit "u1" is in scope when the "hidden" 
> type is used.
Using an interface uses as the analog for private types is flawed in my 
opinion. The analog code would more like this:

=== code begin ===

unit u2;


function f: tdynarray;


   tdynarray = array of integer;

function f: tdynarray;



=== code end ===

Which of course does not compile. The same should be the case for 
private type declarations used in public ones...


More information about the fpc-pascal mailing list