Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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.



Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.