Hi,

 

In the SG15 telecon this morning, the issue of whether a named modules can bring in macros via re-exported header units was discussed.

The issue is that the current specification of module-import-declaration: 10.3/7

 

When a module-import-declaration imports a translation unit T, it also imports all translation units imported by exported module-import-declarations in T; such translation units are said to be exported by T. Additionally, when a module-import-declaration in a module unit of some module M imports another module unit U of M, it also imports all translation units imported by non-exported module-import-declarations in the module unit purview of U.91 These rules can in turn lead to the importation of yet more translation units.

 

places no restrictions on “it also imports all translation units imported by exported module-import-declarations in T;”.

It was pointed out that there is a CWG issue

 

    [cpp.import] Example should demonstrate that module imports do not import macros · Issue #199 · cplusplus/CWG · GitHub

 

to add an example that importing named modules don’t bring in any macros at all.  That is a fundamental invariant for anything to work.  In addition to adding the example, I believe we need to clarify the wording.  The fact that the text is confusing on this aspect is a defect, from my perspective.

 

Thanks,

 

-- Gaby