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. _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice