> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
> Behalf Of Mark Mitchell
> Sent: Saturday, 16 June 2007 11:47 a.m.
>
> Chris Lattner wrote:
>
> > This construct seems like it should be rejected by the C++
> front-end.
> > The source is making two contradictory claims: the struct
> is not visible
> > outside this library, but part of it is implemented outside of it.
>
> I don't think there's a contradiction. The declaration on
> the structure
> is the default for the members and applies to the vtable and
> other class
> data. There's no reason the members shouldn't be implemented
> elsewhere,
> and there's certainly existing code (in Windows, SymbianOS, and other
> DLL-based operating systems, whether or not there is on
> GNU/Linux) that
> implements different class members in different DLLs, while still not
> exporting the class from its home DLL. One situation where this is
> useful is when the class members are actually shared between multiple
> classes, or are also callable as C functions, etc.
>
>
In windows dll's the default visibility of a symbol is hidden (GNU ld as
--export-all-extension to override this default, but that is not the
compiler's fault).
So this, in a dll module source:
>> Consider:
>>
>> struct __attribute__((vsibility ("hidden"))) S {
>> void __declspec(dllimport) f();
>> };
is equivalent to
>> struct __attribute__ S {
>> void __declspec(dllimport) f();
>> };
And certainly that is meaningful on window's targets
Danny