Files
2025-10-25 03:02:53 +03:00

69 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[cpp.module]
# 15 Preprocessing directives [[cpp]](./#cpp)
## 15.5 Module directive [cpp.module]
[pp-module:](#nt:pp-module "15.5Module directive[cpp.module]")
exportopt module [*pp-tokens*](cpp.pre#nt:pp-tokens "15.1Preamble[cpp.pre]")opt ; [*new-line*](cpp.pre#nt:new-line "15.1Preamble[cpp.pre]")
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L1217)
A [*pp-module*](#nt:pp-module "15.5Module directive[cpp.module]") shall not
appear in a context where module or (if it is the first preprocessing token of the [*pp-module*](#nt:pp-module "15.5Module directive[cpp.module]")) export is an identifier defined as an object-like macro[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L1223)
The [*pp-tokens*](cpp.pre#nt:pp-tokens "15.1Preamble[cpp.pre]"), if any, of a [*pp-module*](#nt:pp-module "15.5Module directive[cpp.module]") shall be of the form:
[*pp-module-name*](#nt:pp-module-name "15.5Module directive[cpp.module]") [*pp-module-partition*](#nt:pp-module-partition "15.5Module directive[cpp.module]")opt [*pp-tokens*](cpp.pre#nt:pp-tokens "15.1Preamble[cpp.pre]")opt
where the [*pp-tokens*](cpp.pre#nt:pp-tokens "15.1Preamble[cpp.pre]") (if any) shall not begin with
a ( preprocessing token and
the grammar non-terminals are defined as:
[pp-module-name:](#nt:pp-module-name "15.5Module directive[cpp.module]")
[*pp-module-name-qualifier*](#nt:pp-module-name-qualifier "15.5Module directive[cpp.module]")opt [*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]")
[pp-module-partition:](#nt:pp-module-partition "15.5Module directive[cpp.module]")
: [*pp-module-name-qualifier*](#nt:pp-module-name-qualifier "15.5Module directive[cpp.module]")opt [*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]")
[pp-module-name-qualifier:](#nt:pp-module-name-qualifier "15.5Module directive[cpp.module]")
[*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]") .
[*pp-module-name-qualifier*](#nt:pp-module-name-qualifier "15.5Module directive[cpp.module]") [*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]") .
No [*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]") in
the [*pp-module-name*](#nt:pp-module-name "15.5Module directive[cpp.module]") or [*pp-module-partition*](#nt:pp-module-partition "15.5Module directive[cpp.module]") shall currently be defined as an object-like macro[.](#2.sentence-1)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L1249)
Any preprocessing tokens after the module preprocessing token
in the module directive are processed just as in normal text[.](#3.sentence-1)
[*Note [1](#note-1)*:
Each identifier currently defined as a macro name
is replaced by its replacement list of preprocessing tokens[.](#3.sentence-2)
— *end note*]
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L1257)
The module and export (if it exists) preprocessing tokens
are replaced by the *module-keyword* and*export-keyword* preprocessing tokens respectively[.](#4.sentence-1)
[*Note [2](#note-2)*:
This makes the line no longer a directive
so it is not removed at the end of phase 4[.](#4.sentence-2)
— *end note*]