C++ Logo


Advanced search

Re: [isocpp-core] Named modules, macros, and re-exporting header units

From: Daniela Engert <dani_at_[hidden]>
Date: Fri, 16 Dec 2022 19:06:30 +0100
Am 16.12.2022 um 18:58 schrieb Gabriel Dos Reis via Core:
> 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
> <https://eel.is/c++draft/module.import#7>
> When a /module-import-declaration/
> <https://eel.is/c++draft/module.import#nt:module-import-declaration>
> imports a translation unit T, it also imports all translation units
> imported by exported /module-import-declaration/
> <https://eel.is/c++draft/module.import#nt:module-import-declaration>/s/
> in T; such translation units are said to be /exported/
> <https://eel.is/c++draft/module.import#def:module,exported> by T.
> <https://eel.is/c++draft/module.import#7.sentence-1> Additionally,
> when a /module-import-declaration/
> <https://eel.is/c++draft/module.import#nt: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-declaration/
> <https://eel.is/c++draft/module.import#nt:module-import-declaration>/s/
> in the module unit purview of U.
> <https://eel.is/c++draft/module.import#7.sentence-2>91
> <https://eel.is/c++draft/module.import#footnote-91> These rules can in
> turn lead to the importation of yet more translation units.
> <https://eel.is/c++draft/module.import#7.sentence-3>
> places no restrictions on “it also imports all translation units
> imported by exported /module-import-declaration/
> <https://eel.is/c++draft/module.import#nt:module-import-declaration>/s/
> 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
> <https://github.com/cplusplus/CWG/issues/199>
> 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.
We need to take into account [module.import]/5
<https://eel.is/c++draft/module#import-note-4> that states that imports
*not* nominating header units do *not* affect the preprocessor state.
Current implementations disagree:



> Thanks,
> -- Gaby
> _______________________________________________
> Core mailing list
> Core_at_[hidden]
> Subscription:https://lists.isocpp.org/mailman/listinfo.cgi/core
> Link to this post:http://lists.isocpp.org/core/2022/12/13656.php

PGP/GPG: 2CCB 3ECB 0954 5CD3 B0DB 6AA0 BA03 56A1 2C4638C5

Received on 2022-12-16 18:06:36