big Deps ...
Michael Stahl
mstahl at redhat.com
Thu Jun 21 13:15:41 PDT 2012
On 21/06/12 17:05, Stephan Bergmann wrote:
> On 06/21/2012 04:01 PM, Michael Stahl wrote:
>> On 21/06/12 13:47, Stephan Bergmann wrote:
>>> On 06/21/2012 10:57 AM, Michael Meeks wrote:
>>>> [ indeed, I'm sure there is one - but what is the benefit of separating
>>>> the .hdl files out, if we are sure that each .hpp will include all of
>>>> it's dependent .hpp's ? ].
>>>
>>> Circular dependencies among headers.
>>
>> i wonder: is that the case for all generated headers, or just for some
>> small subset that is necessary for bootstrapping (i.e. probably
>> css.uno/css.lang)?
>
> Its not about bootstrapping, its about scenarios like an interface X
> method argument of struct type S, where S in turn has a member of type X
> (IIRC).
hmm.. interesting... so it looks to me like there are 3 possibilities
for cyclic dependencies: between structs, exceptions and interfaces.
i couldn't get a forward declaration of a struct or an exception in UNO
IDL, so the problematic cases seem to be interface vs. struct and
interface vs. exception.
it looks like using struct as parameter or return value in interface can
be done with forward declaration, so that cycle can be avoided.
however the exceptions are listed in the C++ throw specifications, and
that requires the type to be defined, a forward declaration is not
sufficient. in turn, the exception constructors need to be able to
initialize Reference<XInterface> members.
surprisingly i could get the exception constructor definitions compiled
with GCC with the interface only forward declared (and i admit i don't
understand why this works); however i believe it's likely MSVC would be
stricter here and require a definition of the type parameter of
Reference to initialize the interface member.
More information about the LibreOffice
mailing list