From 0e5e46aaac5a5faeeaf95719e7b9f85c72df0da6 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sun, 13 May 2018 23:54:54 -0700 Subject: [PATCH 01/77] Round of updates for merging parts of the Atom proposal into the Modules TS. --- src/basic.tex | 185 ++++++++++++++++---- src/cover-wd.tex | 37 +++- src/declarations.tex | 390 ++++++++++++++++++++++++++++++++++++++++--- src/lexical.tex | 25 ++- src/macros.tex | 18 +- src/notes | 23 +++ src/references.tex | 1 - src/templates.tex | 21 +++ src/ts.tex | 2 + 9 files changed, 628 insertions(+), 74 deletions(-) create mode 100644 src/notes diff --git a/src/basic.tex b/src/basic.tex index f594a4c..9af7106 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -4,6 +4,8 @@ %gram: \rSec1[gram.basic]{Basic concepts} %gram: +\begin{undecided} + \noindent Modify paragraph 6/3 as follows: @@ -41,16 +43,20 @@ \end{itemize} \end{std.txt} +\end{undecided} + \rSec1[basic.def]{Declarations and definitions} Modify paragraph 6.1/1 as follows: + \begin{std.txt} \resetalinea[0] \alinea A declaration (Clause \ref{dcl.dcl}) may introduce one or more names into a translation unit or redeclare names introduced by previous declarations. If so, the declaration specifies the interpretation and - \removed{attributes}\added{semantic properties} of these names. [...] + \removed{attributes}\added{semantic properties} of these names. + [...] \end{std.txt} \noindent @@ -70,6 +76,7 @@ \color{addclr} % \begin{example} \enterexample +\begin{before}\color{addclr} \begin{codeblock} import std.io; // make names from std.io available export module M; // toplevel declaration for M @@ -78,6 +85,16 @@ int y; }; \end{codeblock} +\end{before}\begin{after}\color{addclr} +\begin{codeblock} + export module M; // toplevel declaration for M + import std.io; // make names from std.io available + export struct Point { // define and export Point + int x; + int y; + }; +\end{codeblock} +\end{after} \exitexample \end{std.txt} @@ -89,10 +106,17 @@ \resetalinea[0] \alinea \added{A variable, function, class type, enumeration type, or template shall not - be defined where a prior definition is reachable (\ref{basic.lookup}).} + be defined where a prior definition is reachable} + \begin{before} + \added{(\ref{basic.lookup}).} + \end{before} + \begin{after} + \added{(\ref{dcl.module.reach}).} + \end{after} \end{std.txt} Modify opening of paragraph 6.2/6 as follows + \begin{std.txt} \resetalinea[5] \alinea @@ -106,9 +130,17 @@ template specialization for which some template parameters are not specified (17.7, 17.5.5) in a program provided that \removed{each definition appears in a different translation unit} - \added{no prior definition is reachable (\ref{basic.lookup}) at the point where a definition appears}, + \added{no prior definition is reachable} + \begin{before} + \added{(\ref{basic.lookup})} + \end{before} + \begin{after} + \added{(\ref{dcl.module.reach})} + \end{after} + \added{at the point where a definition appears}, and provided the definitions satisfy the following requirements. +\begin{before} \added{For an entity with an exported declaration, there shall be only one definition of that entity; a diagnostic is required only if the abstract semantics graph of the module contains a definition of the entity.} @@ -116,14 +148,24 @@ If the definition is not in the interface unit, then at most one module unit can have and make use of the definition. \exitnote} +\end{before} +\begin{after} + \added{For an entity with an exported declaration, there shall be only one + definition of that entity; no diagnostic is required unless a prior definition + is reachable at a point where a later definition appears.} + \added{\enternote + If the definition is in a module implementation unit, then the definition + will only be reachable in that translation unit. + \exitnote} +\end{after} Given such an entity named \tcode{D} defined in more than one translation unit, then \end{std.txt} - - \rSec1[basic.scope]{Scope}% +\begin{undecided} + \setcounter{subsection}{1} \rSec2[basic.scope.pdecl]{Point of declaration} @@ -136,6 +178,8 @@ \term{module-name} in a \grammarterm{module-declaration}.} \end{std.txt} +\end{undecided} + \setcounter{subsection}{5} \rSec2[basic.scope.namespace]{Namespace scope} @@ -162,7 +206,9 @@ (10.3.4) that nominates the member's namespace, the member's potential scope includes that portion of the potential scope of the \grammarterm{using-directive} that follows the member's point of - declaration. \added{If a name $X$ (not having internal linkage) is declared + declaration. +\begin{before} +\added{If a name $X$ (not having internal linkage) is declared in a namespace $N$ in the purview of the module interface unit of a module $M$, the potential scope of $X$ includes the portion of the namespace $N$ in the purview of @@ -170,6 +216,21 @@ and, if the name $X$ is exported, in every translation unit that imports $M$ after a \grammarterm{module-import-declaration} nominating $M$. } +\end{before} +\begin{after} +\added{% +If a translation unit $M$ is imported into a translation unit $N$, +the potential scope of a name $X$ declared with namespace scope in $M$ +is extended to include the portion of the corresponding namespace +scope in $N$ following the first \grammarterm{module-import-declaration} +in $N$ that directly or indirectly nominates $M$ if +} \color{addclr} +\begin{itemize} +\item \added{$X$ does not have internal linkage, and} +\item \added{$X$ is declared after the \grammarterm{module-declaration} in $M$, and} +\item \added{either $M$ and $N$ are part of the same module or $X$ is exported.} +\end{itemize} +\end{after} \color{addclr} % ; and for each \term{module-import-declaration} that nominates M, % the potential scope of X includes the @@ -203,17 +264,24 @@ wherever the grammar allows such names in the context discussed by a particular rule. Name lookup associates the use of a name with a set of declarations (6.1) - \added{or citations (\ref{dcl.module.import})} of that name. +\begin{undecided} + \added{or citations (\ref{dcl.module.import})} +\end{undecided} + of that name. +\begin{undecided} +%%% FIXME: If we keep this, fix the typo "intent" -> "intents" \added{For all intent and purposes of further semantic processing requiring declarations, a citation is replaced with the declarations contained in its declset.} +\end{undecided} [...] Only after name lookup, function overload resolution (if applicable) and access checking have succeeded are the \removed{attributes}\added{semantic properties} introduced by the name's declaration used further in the expression processing (Clause 8). - \end{std.txt} +% Moved to dcl.module.reach with some changes. +\begin{before} Add new paragraph 6.4/5 as follows: \begin{std.txt}\color{addclr} \resetalinea[4] @@ -221,10 +289,12 @@ \added{A declaration is \term{reachable} from a program point if it can be found by unqualified name lookup in its scope.} \end{std.txt} +\end{before} \setcounter{subsection}{1} \rSec2[basic.lookup.argdep]{Argument-dependent name lookup} +%%% TODO: restrict module ADL to only declarations in the module? \noindent Modify paragraph 6.4.2/2 as follows: \begin{std.txt} @@ -322,10 +392,21 @@ and function templates are ignored. \color{addclr} - \item[---] \added{In resolving dependent names (17.6.4), - any function or function template that is owned by a + \item[---] + \begin{before} + \added{In resolving dependent names (17.6.4), any} + \end{before} + \begin{after}\added{Any}\end{after} + \added{function or function template that is owned by a named module \tcode{M} (10.7), that is - declared in the module interface unit of \tcode{M}, and that has + declared in} + \begin{before} + \added{the} + \end{before} + \begin{after} + \added{a} + \end{after} + \added{module interface unit of \tcode{M}, and that has the same innermost enclosing non-inline namespace as some entity owned by \tcode{M} in the set of associated entities, is visible within its namespace even if it is not exported.} @@ -340,7 +421,7 @@ Change the definition of \term{translation-unit} in paragraph 6.5/1 to: - +\begin{before} \begin{bnf}\color{addclr} \added{\nonterminal{translation-unit}\br toplevel-declaration-seq\opt} @@ -357,8 +438,21 @@ module-declaration\br declaration} \end{bnf} +\end{before} +\begin{after} +\begin{bnf} +\nonterminal{translation-unit}:\br + \added{preamble\opt} declaration-seq\opt +\end{bnf} +\begin{bnf} +\added{\nonterminal{preamble}:\br + \terminal{module} \terminal{;} declaration-seq module-declaration\br + module-declaration\br + preamble\opt module-import-declaration} +\end{bnf} +\end{after} \noindent Insert a new bullet between first and second bullet of paragraph 6.5/2: @@ -421,16 +515,32 @@ linkage purposes (10.1.3); or \item a template\removed{.} \end{itemize} - \color{addclr} + \begin{before}\color{addclr} \added{has the same linkage as the enclosing namespace if} \begin{itemize} \item \added{said namespace has internal linkage, or} - \item \added{the name is exported (\ref{dcl.module.interface}), - or is declared in a \grammarterm{proclaimed-ownership-declaration}, + \item \added{the name is exported (\ref{dcl.module.interface}), or} + \added{is declared in a \grammarterm{proclaimed-ownership-declaration}, or is not being declared in the purview of a named module (\ref{dcl.module.unit});} \end{itemize} \added{otherwise, the name has module linkage.} + \end{before} + \begin{after}\color{addclr} + \added{has its linkage determined as follows:} + \begin{itemize}\color{addclr} + \item \added{if the enclosing namespace has internal linkage, + the name has internal linkage;} + \item \added{otherwise, if + the declaration of the name is attached to a named module, + is not exported (\ref{dcl.module.interface}), + and is not declared in a + \grammarterm{proclaimed-ownership-declaration} or a + \grammarterm{linkage-specification}, + the name has module linkage;} + \item \added{otherwise, the name has external linkage}. + \end{itemize} + \end{after} \end{std.txt} @@ -445,45 +555,55 @@ same name and type, ignoring entities declared outside the innermost enclosing namespace scope, the block scope declaration declares that same entity and receives the linkage of the previous declaration. -\added{If that entity was exported by an imported module or if the containing block scope is in the purview of a named module, the program is -ill-formed.} If +\begin{before} +\added{If that entity was exported by an imported module +or if the containing block scope is in the purview of a named module, the program is +ill-formed.} +\end{before} +If there is more than one such matching entity, the program is ill-formed. Otherwise, if no matching entity is found, the block scope entity receives external linkage. +\begin{after} +\added{In either case, if the declared entity would be owned by a named module, +the program is ill-formed.} +\end{after} \end{std.txt} \noindent -Modify paragrapgh 6.5/9 as follows: +Modify paragraph 6.5/9 as follows: \begin{std.txt} \resetalinea[8] \alinea + \addtocounter{footnote}{1} Two names that are the same (Clause 9) and that are declared in different scopes shall denote the same variable, function, type, template or namespace if \begin{itemize} \item[---] both names have external \added{or module} linkage \added{and are declared in declarations attached to the - same module}{\color{addclr}\footnote{This provision supports implementations where - exported entities in different modules have different implementation - symbols. Conversely, for other implementations, exported entities - have the same implementation symbols regardless of in which - module they are declared. Such implementations are supported - for the time being by disallowing all situations where the same names - with external linkage might appear from different modules.}}\added{,} + same module}% + {\color{addclr}\footnote{\added{This provision supports implementations where + exported entities in different modules have different implementation + symbols. Conversely, for other implementations, exported entities + have the same implementation symbols regardless of in which + module they are declared. Such implementations are supported + for the time being by disallowing all situations where the same names + with external linkage might appear from different modules.}}}\added{,} or else both names have internal linkage and are declared in the same translation unit; and \item both names refer to members of the same namespace or to members, not by inheritance, of the same class; and - \item when both names denote functions, the parameter-typelists of the + \item when both names denote functions, the parameter-type-lists of the functions (11.3.5) are identical; and \item when both names denote function templates, the signatures (17.5.6.1) ar the same. \end{itemize} \added{If two declarations - declaring entities (other than namespaces) and attached to - different modules introduce two names that are the same + declaring entities (other than namespaces) and attached to + different modules introduce two names that are the same and that both have external linkage, the program is ill-formed; no diagnostic required. \enternote @@ -491,8 +611,7 @@ \grammarterm{alias-declaration}{s} do not declare entities, but merely introduce synonyms. Similarly, \grammarterm{using-directive}{s} do not declare entities, either. - \exitnote - } + \exitnote} \end{std.txt} @@ -507,6 +626,12 @@ \resetalinea[0] \alinea A program shall contain a global function called \tcode{main} + % This is a semantic requirement not a syntactic one, so should use ownership not purview. + \begin{before} \added{declared in the purview of the global module}. + \end{before} + \begin{after} + \added{owned by the global module}. + \end{after} \end{std.txt} diff --git a/src/cover-wd.tex b/src/cover-wd.tex index 1bd9eed..e1ea908 100644 --- a/src/cover-wd.tex +++ b/src/cover-wd.tex @@ -9,9 +9,9 @@ \textbf{Document Number:} & {\larger\docno} \\ \textbf{Date:} & \reldate \\ \textbf{Revises:} & \prevdocno \\ - \textbf{Reply to:} & Gabriel Dos~Reis \\ - & Microsoft \\ - & gdr@microsoft.com + \textbf{Reply to:} & Richard Smith \\ + & Google \\ + & richard@metafoo.co.uk \end{tabular} } \newlength{\hdwidth} @@ -22,10 +22,31 @@ \vspace{2.5cm} \begin{center} \textbf{\Huge -Working Draft, Extensions to \Cpp for Modules} +Merging Modules} \end{center} -\vfill -\textbf{Note: this is an early draft. It's known to be incomplet and - incorrekt, and it has lots of - b\kern-1.2pta\kern1ptd\hspace{1.5em}for\kern-3ptmat\kern0.6ptti\raise0.15ex\hbox{n}g.} + +This document presents the changes to be applied to the Modules TS in order +to merge the features of the Atom proposal, as directed by Evolution at the +Jacksonville 2018 committee meeting. + +A note aboute stylistic conventions: as this document describes a ``diff of +a diff,'' the usual convention of using text style for \added{added} and +\removed{removed} text does not work well. In its place, we use block-style +diffs showing the text of the Modules TS before and after this document is +applied: + +\begin{before} +Here is some text from the \Cpp standard +\added{with some additions from the Modules TS}. +\end{before} + +\begin{after} +Here is some text from the \Cpp standard +\added{with some additions from the Modules TS} +\added{and some more from the Atom proposal}. +\end{after} + +Unchanged text from the Modules TS is retained in this document so that a +complete picture of the ``after'' wording may be obtained by simply ignoring +the ``before'' regions. \newpage diff --git a/src/declarations.tex b/src/declarations.tex index 0f40e7d..19677c8 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -7,7 +7,7 @@ %gram: \noindent -Add a new alternative to \term{declaration} in paragraph 10/1 as follows +Add new alternatives to \term{declaration} in paragraph 10/1 as follows \begin{std.txt} \begin{bnf} \nonterminal{declaration}:\br @@ -109,6 +109,9 @@ that is, the members of the namespace. Unlike other declarative regions, the definition of a namespace can be split over several parts of one or more translation units. + %%% TODO: Decide if we want this rule or the "namespace names are + %%% exported only if their name or some name within them is exported" rule. + \begin{undecided} \added{A namespace with external linkage is always exported regardless of whether any of its \term{namespace-definition}{s} is introduced by \tcode{export}. @@ -123,8 +126,30 @@ } \end{codeblock} \end{example} + \end{undecided} +%%% \begin{after} +%%% \added{A namespace with external linkage is exported +%%% if any of its \term{namespace-definition}{s} is +%%% introduced by \tcode{export}, or if it contains any +%%% \grammarterm{export-declaration}{s}.} +%%% \enternote +%%% Excluding anonymous namespaces and namespaces nested within +%%% them, a namespace always has external linkage even if it is +%%% not exported. +%%% \exitnote +%%% \color{addclr} +%%% \begin{example} +%%% \begin{codeblock} +%%% export module M; +%%% namespace N1 {} // \tcode{N1} is not exported +%%% export namespace N2 {} // \tcode{N2} is exported +%%% namespace N3 { export int n; } // \tcode{N3} is exported +%%% \end{codeblock} +%%% \end{example} +%%% \end{after} \end{std.txt} +\begin{undecided} \setcounter{subsection}{2} \rSec2[namespace.udecl]{The \tcode{using} declaration} @@ -147,7 +172,7 @@ declaration \added{or citation} introduced by the \grammarterm{using-declarator}. [...] \end{std.txt} - +\end{undecided} \noindent Add a new subclause 10.7 titled ``\textbf{Modules}'' as follows: @@ -158,16 +183,30 @@ \rSec2[dcl.module.unit]{Module units and purviews} \begin{std.txt}\color{addclr} - \begin{bnf}\color{addclr} - \nonterminal{module-declaration}:\br - \terminal{export}\opt {} \terminal{module} module-name attribute-specifier-seq\opt \terminal{;} - \end{bnf} +\begin{before}\color{addclr} +\begin{bnf} +\nonterminal{module-declaration}:\br + \terminal{export}\opt{} \terminal{module} module-name attribute-specifier-seq\opt{} \terminal{;} +\end{bnf} +\end{before}\begin{after}\color{addclr} +\begin{bnf} +\nonterminal{module-declaration}:\br + \terminal{export}\opt{} \terminal{module} module-name module-partition\opt{} attribute-specifier-seq\opt{} \terminal{;} +\end{bnf} +\end{after} \begin{bnf}\color{addclr} \nonterminal{module-name}:\br module-name-qualifier-seq\opt identifier \end{bnf} + \begin{after} + \begin{bnf}\color{addclr} + \nonterminal{module-partition}:\br + \terminal{:} module-name-qualifier-seq\opt identifier + \end{bnf} + \end{after} + \begin{bnf}\color{addclr} \nonterminal{module-name-qualifier-seq}:\br module-name-qualifier \terminal{.}\br @@ -183,15 +222,41 @@ \alinea A \term{module unit} is a translation unit that contains a \grammarterm{module-declaration}. A \term{named module} is the collection of module units with the same \grammarterm{module-name}. +\begin{before}\color{addclr} +% This follows from the grammar now. A translation unit shall not contain more than -one \grammarterm{module-declaration}. A \grammarterm{module-name} +one \grammarterm{module-declaration}. +\end{before} +A \grammarterm{module-name} has external linkage but cannot be found by name lookup. \alinea A \term{module interface unit} is a module unit whose \grammarterm{module-declaration} contains the \texttt{export} keyword; -any other module unit is a \term{module implementation unit}. A named -module shall contain exactly one module interface unit. +any other module unit is a \term{module implementation unit}. +\begin{before}\color{addclr} +A named module shall contain exactly one module interface unit. +\end{before} +\begin{after}\color{addclr} +A named module shall contain exactly one module interface unit +with no \grammarterm{module-partition}, known as the +\term{primary module interface unit} of the module. +\end{after} + +\begin{after}\color{addclr} +\alinea +A \term{module partition} is +a module unit whose \grammarterm{module-declaration} contains +a \grammarterm{module-partition}. +A named module shall not contain multiple module partitions with +the same sequence of \grammarterm{identifier}{s} in their +\grammarterm{module-partition}. +All module partitions of a module +that are module interface units +shall be directly or indirectly exported +by the primary module interface unit (\ref{dcl.module.export}). +No diagnostic is required for a violation of these rules. +\end{after} \alinea A \term{module unit purview} starts at the \grammarterm{module-declaration} @@ -206,29 +271,67 @@ global module. \enternote The global module has no name, no module interface unit, and is not - introduced by any - \grammarterm{module-declaration}. +introduced by any \grammarterm{module-declaration}. \exitnote \alinea A \term{module} is either a named module or the global module. + \begin{before}\color{addclr} A \grammarterm{proclaimed-ownership-declaration} is \term{attached} to the module it nominates; any other declaration is attached to the module in whose purview it appears. + \end{before} + \begin{after}\color{addclr} + A declaration is \term{attached} to a module determined as follows: + \begin{itemize}\color{addclr} + \item If the declaration is of a replaceable global allocation or deallocation + function (\stdref{new.delete.single}{21.6.2.1}, \stdref{new.delete.array}{21.6.2.2}), + it is attached to the global module. + + \item Otherwise, if the declaration is a + \grammarterm{namespace-declaration} with external linkage, it + is attached to the global module. + + \item Otherwise, if the declaration is + within a \grammarterm{proclaimed-ownership-declaration}, it + is attached to the module nominated by the + \grammarterm{proclaimed-ownership-declaration}. + + \item Otherwise, if the declaration is + within a \grammarterm{linkage-specification}, it + is attached to the global module. + + \item Otherwise, the declaration is + attached to the module in whose purview it appears. + \end{itemize} + \end{after} \alinea + \begin{before}\color{addclr} For a namespace-scope declaration $D$ of an entity (other than a namespace), if $D$ is within a \grammarterm{proclaimed-ownership-declaration} for a module $X$, the entity is said to be \term{owned} by $X$. Otherwise, if $D$ is the first declaration of that entity, then that entity is said to be \term{owned} by the module in whose purview $D$ appears. +\end{before} +\begin{after}\color{addclr} +An entity introduced at namespace scope is \term{owned} by the +module to which its first declaration is attached. +\end{after} \alinea If a declaration attached to some module matches (according to the redeclaration rules) a reachable declaration - from a different module, + \begin{before}\color{addclr} + from + \end{before} + \begin{after}\color{addclr} + attached to + \end{after} + a different module, the program is ill-formed. \begin{example} + \begin{before}\color{addclr} \begin{codeblock} // module interface of M int f(); // \#1 @@ -244,17 +347,50 @@ static int h(); // error: matches \#3 int k(); // error: matches \#4 \end{codeblock} + \end{before}\begin{after}\color{addclr} + \begin{codeblock} + // module interface of M + module; + int f(); // \#1 + int g(); // \#2, owned by the global module + export module M; + export using ::f; // OK: does not declare an entity + int g(); // error: matches \#2, but appears in the purview of M + export int h(); // \#3 + export int k(); // \#4 + + // other translation unit + import M; + static int h(); // error: matches \#3 + int k(); // error: matches \#4 + \end{codeblock} + \end{after} \end{example} \alinea +\begin{before}\color{addclr} The subgraph of the abstract semantics graph $G$ of a module $M$ generated by the nodes of $G$, excluding those introducing names with internal linkage, is available to name lookup in the purview of every module implementation unit of $M$. The declsets made available by the \grammarterm{module-import-declaration}{s} - in the purview of the module - interface unit of $M$ are also available to name lookup in the purview of all + in the purview of + %\begin{before} + the module interface unit of $M$ + %\end{before} + %\begin{after} + %the module interface units of $M$ + %\end{after} + are also available to name lookup in the purview of all module implementation units of $M$. +\end{before} +\begin{after}\color{addclr} +A \grammarterm{module-declaration} +that contains neither \tcode{export} +nor a \grammarterm{module-partition} +implicitly imports the primary module interface unit of the module +as if by a \grammarterm{module-import-declaration}. +\end{after} \end{std.txt} \rSec2[dcl.module.interface]{Export declaration}% @@ -273,7 +409,7 @@ An \grammarterm{export-declaration} shall not appear directly or indirectly within an unnamed namespace. An \grammarterm{exported-declaration} - has the declarative effects of its \grammarterm{declaration} + has the declarative effects of its \grammarterm{declaration} or its \grammarterm{declaration-seq} (if any). An \grammarterm{export-declaration} does not establish a scope and shall not contain more than one @@ -286,8 +422,11 @@ \begin{grammar} @\tcode{export}@ @\term{declaration}@ \end{grammar} - the \grammarterm{declaration} shall be a \grammarterm{module-import-declaration}, - or it shall declare at least one name, + the \grammarterm{declaration} + \begin{before}\color{addclr} + shall be a \grammarterm{module-import-declaration}, or it + \end{before} + shall declare at least one name, and if that declaration declares an entity, the \grammarterm{decl-specifier-seq} (if any) of the \grammarterm{declaration} shall not contain \tcode{static}. @@ -295,6 +434,7 @@ \grammarterm{unnamed-namespace-definition} or a \grammarterm{proclaimed-ownership-declaration}. \begin{example} + \begin{before}\color{addclr} \begin{codeblock} export int x; // error: not in the purview of a module interface unit export module M; @@ -306,6 +446,20 @@ export namespace N { } // OK export using namespace N; // error: does not declare a name \end{codeblock} + \end{before}\begin{after}\color{addclr} + \begin{codeblock} + module; + export int x; // error: not in the purview of a module interface unit + export module M; + namespace { + export int a; // error: export within unnamed namespace + } + export static int b; // error: b explicitly declared static. + export int f(); // OK + export namespace N { } // OK + export using namespace N; // error: does not declare a name + \end{codeblock} + \end{after} \end{example} If the \grammarterm{declaration} is a \grammarterm{using-declaration} @@ -340,7 +494,6 @@ \exitnote \alinea - An \grammarterm{export-declaration} of the form \begin{grammar} @\tcode{export}@ @\tcode{\{} \term{declaration-seq${}_{opt}$} \tcode{\}}@ @@ -350,13 +503,25 @@ \tcode{export}. \alinea - A namespace-scope or a class-scope declaration lexically + A namespace-scope + \begin{before}\color{addclr} + or a class-scope + \end{before} + declaration lexically contained in an \grammarterm{export-declaration}, as well as the entities and the names it introduces are said to be \term{exported}. + \begin{before}\color{addclr} The exported declarations in the interface of a module are reachable from any translation unit importing that module. + \end{before} \enternote Exported names have either external linkage or no linkage; see \ref{basic.link} + \begin{after}\color{addclr} + Namespace-scope names exported by a module are visible to name lookup + in any translation unit importing that module; see \ref{basic.scope.namespace}. + Class and enumeration member names are visible to name lookup in any + context in which a definition of the type is reachable. + \end{after} \exitnote % The declarations introducing names with linkage % other than internal linkage introduced or made reachable @@ -465,33 +630,125 @@ \rSec2[dcl.module.import]{Import declaration}% \begin{std.txt}\color{addclr} +\begin{before} \begin{bnf}\color{addclr} \nonterminal{module-import-declaration}:\br \terminal{import} module-name attribute-specifier-seq\opt {} \terminal{;} \end{bnf} +\end{before}\begin{after} + \begin{bnf}\color{addclr} + \nonterminal{module-import-declaration}:\br + \terminal{export}\opt{} \terminal{import} module-name attribute-specifier-seq\opt {} \terminal{;}\br + \terminal{export}\opt{} \terminal{import} module-partition attribute-specifier-seq\opt {} \terminal{;}\br + \terminal{export}\opt{} \terminal{import} header-name attribute-specifier-seq\opt {} \terminal{;} + \end{bnf} +\end{after} \resetalinea[0] \alinea A \grammarterm{module-import-declaration} shall appear only at global scope, and not in a \grammarterm{linkage-specification} or \grammarterm{proclaimed-ownership-declaration}. + \begin{after}\color{addclr} + In a module unit, a \grammarterm{module-import-declaration} shall + appear only within the \grammarterm{preamble}. + + \alinea + \end{after} A \grammarterm{module-import-declaration} nominating a module $M$ - makes every citation and every exported declaration from the + \begin{after}\color{addclr} + imports all module interface units of $M$. + \end{after} + + \begin{after}\color{addclr} + \alinea + A \grammarterm{module-import-declaration} nominating + a \grammarterm{module-partition} shall only appear after + the \grammarterm{module-declaration} in a module unit in + some module $M$. + Such a declaration imports the so-named + \grammarterm{module-partition} of $M$. + + \color{addclr} + \alinea + A \grammarterm{module-import-declaration} nominating + a \grammarterm{header-name} $H$ behaves as if it imports + a synthesized \term{legacy header unit} defined as follows: + + \begin{codeblock}\color{addclr} + export module @\textit{unique}@ ; + export extern "C++" { + #include @$H$@ + } + \end{codeblock} + + where \textit{unique} is a \grammarterm{module-name} + different from every \tcode{module-name} + used in the program, and where two + \grammarterm{module-import-declaration}{s} + import the same legacy header unit if and only if + their \grammarterm{header-name}{s} identify the same + header or source file. + \enternote + A \grammarterm{module-import-declaration} nominating + a \grammarterm{header-name} is also recognized by the + preprocessor and may result in one or more macros being + made available (\ref{cpp.module}). + \exitnote + \end{after} + + \alinea + \begin{after} + Importing a translation unit $M$ + \end{after} + makes every citation and every + \begin{before}\color{addclr} + exported declaration + \end{before} + \begin{after}\color{addclr} + exported name + \end{after} + from the abstract semantics graph of $M$ available, as a citation, %makes exported declarations from the interface of the nominated module visible to name lookup in the current translation unit, in the same namespaces and contexts as in $M$. % the nominated module. + \begin{after} + If $M$ is part of the same module as the importing translation unit, + importing $M$ also makes every name declared in the purview of $M$ + that does not have internal linkage visible to name lookup + in the current translation unit, in the same namespaces and contexts + as in $M$. + \end{after} + \begin{before}\color{addclr} A \term{citation} for a declaration attached to a module $M$ is a pair of $M$ and the corresponding declset from the abstract semantics graph of $M$. + \end{before} + \begin{after}\color{addclr} + A \term{citation} for a declaration in a translation unit $M$ is a pair of + $M$ and the corresponding declset from the abstract semantics graph + of $M$. + \end{after} % The \grammarterm{attribute-specifier-seq} appartain to the nominated module. \enternote The declarations in the declsets and the entities denoted by the declsets are not redeclared in the translation unit - containing the \grammarterm{module-import-declaration}. + containing the \grammarterm{module-import-declaration}. + \exitnote + + \begin{after}\color{addclr} + \alinea + \enternote + A \grammarterm{module-import-declaration} also makes all + declarations in the purview of the module interface units of $M$ + reachable in the current translation unit, and may make declarations + from the preamble of $M$ reachable in the current translation + unit, as described in \ref{dcl.module.reach}. \exitnote + \end{after} \begin{example} \begin{Program} // Interface unit of M @@ -518,10 +775,18 @@ \end{example} \alinea +\begin{before}\color{addclr} A module \tcode{M1} \term{has a dependency} on a module \tcode{M2} if any module unit of \tcode{M1} contains a \grammarterm{module-import-declaration} nominating \tcode{M2}. A module shall not have a dependency on itself. +\end{before} +\begin{after}\color{addclr} + A module implementation unit of a module \tcode{M} + that is not a module partition + shall not contain a \grammarterm{module-import-declaration} + nominating \tcode{M}. +\end{after} \begin{example} \begin{codeblock} module M; @@ -530,12 +795,21 @@ \end{example} \alinea +\begin{before}\color{addclr} A module \tcode{M1} \term{has an interface dependency} on a module \tcode{M2} if the module interface of \tcode{M1} contains a \grammarterm{module-import-declaration} nominating \tcode{M2}, or if there exists a module \tcode{M3} such that \tcode{M1} has an interface dependency on \tcode{M3} and \tcode{M3} has an interface dependency on \tcode{M2}. A module +\end{before} +\begin{after}\color{addclr} + A translation unit \term{has an interface dependency} on a module unit \tcode{U} in module \tcode{M} + if it is a module implementation unit of \tcode{M} and \tcode{U} is a module interface unit, + or if it contains a \grammarterm{module-import-declaration} nominating \tcode{U}, or if it has + an interface dependency on a module unit that has an interface dependency on \tcode{U}. + A translation unit +\end{after} shall not have an interface dependency on itself. \begin{example} \begin{Program} @@ -553,21 +827,28 @@ \end{Program} \end{example} - \alinea +\begin{before}\color{addclr} +\alinea A translation unit has an interface dependency on a module \tcode{M} if it is a module implementation unit of \tcode{M}, or if it contains a \grammarterm{module-import-declaration} nominating \tcode{M}, or if it has an interface dependency on a module that has an interface dependency on \tcode{M}. +\end{before} \end{std.txt} - \rSec2[dcl.module.export]{Module exportation}% \begin{std.txt}\color{addclr} \resetalinea[0] \alinea + \begin{after}\color{addclr} + A \grammarterm{module-import-declaration} declared with \tcode{export} + is \term{exported}, and shall only appear after the + \grammarterm{module-declaration} in the \grammarterm{preamble} + of a module interface unit. + \end{after} An exported - \grammarterm{module-import-declaration} nominating a module \tcode{M2} + \grammarterm{module-import-declaration} nominating a module \tcode{M2} in the purview of a module interface unit of a module \tcode{M} makes all exported names of \tcode{M2} visible to any translation unit importing \tcode{M}, as if @@ -661,7 +942,42 @@ are made available to name lookup in another translation unit $TU$, it is necessary to determine the interpretation of the names they introduce and their - semantic properties. Except as noted below, the + semantic properties. +\begin{after}\color{addclr} + \alinea + A semantic property is \term{reachable} from a program point if + \begin{itemize}\color{addclr} + \item it is declared prior to that program point in the same translation unit, or + \item it is declared in the purview of a module interface unit of a module + that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}), or + \item it is declared in the preamble of a module interface unit of a module + that is directly + or indirectly imported prior to that program point + and is a reachable semantic property of an exported declaration + in that translation unit as described below. + \end{itemize} + When the semantic properties of an entity are examined, + all properties that are reachable from + the point of inquiry are found, + even if the declaration introducing the property + is not visible to unqualified lookup. +\begin{example} +\begin{codeblock} +module; +struct X {}; +export module A; +export using Y = X; + +module B; +import A; +Y y; // OK, definition of \tcode{X} is reachable +X x; // ill-formed: \tcode{X} not visible to unqualified lookup +\end{codeblock} +\end{example} +\end{after} + + \alinea + Except as noted below, the \term{reachable semantic properties} of declset $D$ (or of the entity, if any, denoted by that declset) of the abstract semantic graph of $M$ from $TU$ are @@ -698,6 +1014,9 @@ \begin{example} \begin{codeblock} // TU 1 + @\begin{after}\color{addclr} + module; + \end{after}@ struct F { int f { 42 }; }; export module M; export using T = F; @@ -894,8 +1213,13 @@ \alinea If $X$ is an attendant entity of two exported declarations - designating two distinct entities, its reachable semantic properties shall + designating two distinct entities, + \begin{after}\color{addclr} + and $X$ is declared in the purview of the global module, + \end{after} + its reachable semantic properties shall be the same at the points where the declarations occur. + \begin{before}\color{addclr} \begin{example} \begin{codeblock} export module M; @@ -905,6 +1229,18 @@ export S g(); // error: class type S has different properties from \#1 \end{codeblock} \end{example} + \end{before} + \begin{after}\color{addclr} + \begin{example} + \begin{codeblock} + module; + struct S; + export module M; + export S f(); // \#1 + extern "C++" struct S { }; + export S g(); // error: class type S has different properties from \#1 + \end{codeblock} + \end{example} + \end{after} \end{std.txt} - diff --git a/src/lexical.tex b/src/lexical.tex index 3795844..b2a6223 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -39,8 +39,10 @@ The process of analyzing and translating the tokens may occasionally result in one token being replaced by a sequence of other tokens (17.2). \exitnote - \added{It is implementation-defined whether the source for module interface - units for modules on which the current translation unit has an interface + \added{It is implementation-defined whether the source for} + \begin{before}\added{module interface units for modules}\end{before} + \begin{after}\added{module units}\end{after} + \added{on which the current translation unit has an interface dependency (\ref{dcl.module.import}) is required to be available.} \enternote Source files, translation units and translated translation units need not @@ -52,7 +54,7 @@ \end{itemize} \end{std.txt} - +\begin{undecided} Add new paragraphs as follows: \begin{std.txt}\color{addclr} \resetalinea[1] @@ -70,10 +72,19 @@ declarations contained in $D_2$ declare an entity mentioned in a declaration contained in $D_1$. \end{itemize} - The \term{abstract semantics graph of a module} is the subgraph of + The \term{abstract semantics graph of a module} is + \begin{before}\color{addclr} + the subgraph of the abstract semantics graph of its module interface unit generated by the declsets the declarations of which are - in the purview of that module interface unit. + in the purview of that module interface unit. + \end{before} + \begin{after}\color{addclr} + the subgraph of + the abstract semantics graph of its module interface units generated + by the declsets the declarations of which are + in the purview of those module interface units. + \end{after} \enternote The abstract semantics graphs of modules, as appropriately restricted (\ref{dcl.module.reach}), are used in @@ -421,7 +432,7 @@ \exitnote \end{std.txt} - +\end{undecided} \setcounter{section}{10} \Sec1[lex.key]{Keywords} @@ -442,4 +453,4 @@ unused but \removed{are} \added{is} reserved for future use. \exitnote -\end{std.txt} \ No newline at end of file +\end{std.txt} diff --git a/src/macros.tex b/src/macros.tex index 764a582..069dec3 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -187,6 +187,7 @@ %% Cross reference \newcommand{\xref}{\textsc{See also:}\xspace} \newcommand{\xsee}{\textsc{See:}\xspace} +\newcommand{\stdref}[2]{#2} %% NTBS, etc. \newcommand{\NTS}[1]{\textsc{#1}\xspace} @@ -351,7 +352,7 @@ \newcommand{\bnfindentfirst}{\BnfIndent} \newcommand{\bnfindentinc}{\BnfInc} \newcommand{\bnfindentrest}{\BnfRest} - \begin{minipage}{.9\hsize} + \begin{minipage}{.95\hsize} \newcommand{\br}{\hfill\\} \frenchspacing } @@ -509,3 +510,18 @@ \subsubsection[#1]{\hfill[#2]}\vspace{-.3\onelineskip}\label{#2}\textbf{#1}\\% } \newcommand{\defncontext}[1]{\textlangle#1\textrangle} + +\newenvironment{before}{ +\begin{tcolorbox}[breakable,colback=red!5!white,colframe=red!75!black,title=Before] +}{ +\end{tcolorbox} +} + +\newenvironment{after}{ +\begin{tcolorbox}[breakable,colback=green!5!white,colframe=green!75!black,title=After] +}{ +\end{tcolorbox} +} + +% Wording on which the authors disagree. +\newenvironment{undecided}{}{} diff --git a/src/notes b/src/notes new file mode 100644 index 0000000..865a8e2 --- /dev/null +++ b/src/notes @@ -0,0 +1,23 @@ +added module partitions +added "linkage specifications opt out of module ownership" +added module preamble syntax +added 'module;' introducer (p0713r1, approved at jax) +header import semantics +module import declaration shall only appear within preamble if there is a module-declaration +availability rule (effects may be available despite the declaration not being visible) + +TODO: +header import preprocessor effects +preamble identification + +module partition import and export: do we need 'export import :partition' to match 'export module foo:partition', or just infer it? + +WORDING QUESTIONS: +do we need ASG etc? can we simplify it? +do we need modules-as-entities? + +TO DISCUSS WITH EWG: +namespace export rules +ADL and path of instantiation +#export +public import or restricted import diff --git a/src/references.tex b/src/references.tex index 873dc47..cc37c66 100644 --- a/src/references.tex +++ b/src/references.tex @@ -3,7 +3,6 @@ \rSec0[intro.refs]{Normative references} \pnum - The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. diff --git a/src/templates.tex b/src/templates.tex index 4f8faa0..9f1a4b7 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -51,6 +51,9 @@ } // Interface unit of M1 + @\begin{after}\color{addclr} + module; + \end{after}@ #include "X.h" // global module namespace Q { void g_impl(X, X); @@ -62,6 +65,9 @@ } // Interface unit of M2 + @\begin{after}\color{addclr} + module; + \end{after}@ #include "X.h" import M1; export module M2; @@ -91,6 +97,9 @@ } // Interface unit of M + @\begin{after}\color{addclr} + module; + \end{after}@ import Std; export module M; @@ -119,6 +128,9 @@ } // Module interface unit of M + @\begin{after}\color{addclr} + module; + \end{after}@ #include "X.h" import F; export module M; @@ -149,6 +161,9 @@ } // Module interface unit of C + @\begin{after}\color{addclr} + module; + \end{after}@ #include // not in the purview of C import B; export module C; @@ -180,6 +195,9 @@ \enterexample \begin{codeblock} // Module interface unit of M1 + @\begin{after}\color{addclr} + module; + \end{after}@ #include export module M1; @@ -189,6 +207,9 @@ } // Module interface unit of M2 + @\begin{after}\color{addclr} + module; + \end{after}@ #include struct Aux : std::ctype_base { operator int() const; diff --git a/src/ts.tex b/src/ts.tex index e1ad9e4..a9cba09 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -46,6 +46,8 @@ ]{hyperref} \usepackage{memhfixc} % fix interactions between hyperref and memoir \usepackage{xstring} +\usepackage{tcolorbox} +\tcbuselibrary{breakable} \input{layout} \input{styles} From b3e80ea0d9392aab667f0919ba82a4836daf0bae Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 15 May 2018 17:18:18 -0700 Subject: [PATCH 02/77] Add macro import and export rules for legacy header units. --- src/declarations.tex | 20 ++++- src/lexical.tex | 19 +++++ src/notes | 4 - src/preprocessor.tex | 169 +++++++++++++++++++++++++++++++++++++++++++ src/templates.tex | 8 +- src/ts.tex | 1 + 6 files changed, 209 insertions(+), 12 deletions(-) create mode 100644 src/preprocessor.tex diff --git a/src/declarations.tex b/src/declarations.tex index 19677c8..b62cf46 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -695,10 +695,26 @@ preprocessor and may result in one or more macros being made available (\ref{cpp.module}). \exitnote + Within a legacy header unit, certain semantic restrictions + are relaxed: + \begin{itemize} + \item A \grammarterm{module-import-declaration} may appear + in the purview of the module, and is considered to be exported. + \item A declaration of a name with internal linkage is + permitted within the synthesized + \grammarterm{export-declaration}. If such a name is + odr-used by a translation unit outside the legacy + header unit, or by an instantiation unit for a template + instantiation whose point of instantiation is outside + the legacy header unit, the program is ill-formed. + \end{itemize} + The \grammarterm{linkage-specification} shall not be + terminated by an included \tcode{\}} token preceding + the synthesized \tcode{\}} token. \end{after} \alinea - \begin{after} + \begin{after}\color{addclr} Importing a translation unit $M$ \end{after} makes every citation and every @@ -715,7 +731,7 @@ the current translation unit, in the same namespaces and contexts as in $M$. % the nominated module. - \begin{after} + \begin{after}\color{addclr} If $M$ is part of the same module as the importing translation unit, importing $M$ also makes every name declared in the purview of $M$ that does not have internal linkage visible to name lookup diff --git a/src/lexical.tex b/src/lexical.tex index b2a6223..921f655 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -434,6 +434,25 @@ \end{std.txt} \end{undecided} +\begin{after} +\setcounter{section}{3} +\Sec1[lex.pptoken]{Preprocessing tokens} + +Modify bullet 3 of paragraph 5.4/3 as follows: + +\begin{std.txt} +Otherwise, the next preprocessing token is +the longest sequence of characters +that could constitute a preprocessing token, +even if that would cause further lexical analysis to fail, +except that a \grammarterm{header-name} (5.8) +is only formed +\added{immediately after a \grammarterm{preprocessing-token} +that is lexically identical to the \tcode{import} \grammarterm{keyword}, or} +within a \tcode{\#include} directive (19.2). +\end{std.txt} +\end{after} + \setcounter{section}{10} \Sec1[lex.key]{Keywords} diff --git a/src/notes b/src/notes index 865a8e2..0e775a6 100644 --- a/src/notes +++ b/src/notes @@ -5,13 +5,9 @@ added 'module;' introducer (p0713r1, approved at jax) header import semantics module import declaration shall only appear within preamble if there is a module-declaration availability rule (effects may be available despite the declaration not being visible) - -TODO: header import preprocessor effects preamble identification -module partition import and export: do we need 'export import :partition' to match 'export module foo:partition', or just infer it? - WORDING QUESTIONS: do we need ASG etc? can we simplify it? do we need modules-as-entities? diff --git a/src/preprocessor.tex b/src/preprocessor.tex new file mode 100644 index 0000000..bede3b2 --- /dev/null +++ b/src/preprocessor.tex @@ -0,0 +1,169 @@ +%!TEX root = std.tex +\setcounter{chapter}{18} +\rSec0[cpp]{Preprocessing directives}% + +\begin{after} +Modify paragraph 19/5 as follows: + +\begin{std.txt} +\resetalinea[4] +\alinea +The implementation can +process and skip sections of source files conditionally, +include other source files, +\added{import macros from legacy header units,} +and replace macros. +These capabilities are called +\term{preprocessing}, +because conceptually they occur +before translation of the resulting translation unit. +\end{std.txt} + +\noindent +Add a new subclause 19.3 titled ``\textbf{Legacy header units}'' as follows: + +\setcounter{section}{2} +\rSec1[cpp.module]{Legacy header units}% +\resetalinea[0] + +\begin{std.txt} +\color{addclr} +\begin{bnf} +\nonterminal{pp-import}:\br + \terminal{export}\opt{} \terminal{import}\opt{} header-name pp-attrs\opt{} \terminal{;} +\end{bnf} + +\begin{bnf} +\nonterminal{pp-attrs}:\br + pp-attrs\opt{} \terminal{[} \terminal{[} pp-attr-tokens \terminal{]} \terminal{]} +\end{bnf} + +\begin{bnf} +\nonterminal{pp-attr-tokens}:\br + pp-attr-tokens\opt{} pp-attr-token +\end{bnf} + +\begin{bnf} +\nonterminal{pp-attr-token}:\br + \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{]}} +\end{bnf} + +\begin{bnf} +\nonterminal{pp-preamble}:\br + \terminal{module}\opt{} pp-module-name pp-attrs\opt{} \terminal{;} + pp-preamble pp-import +\end{bnf} + +\begin{bnf} +\nonterminal{pp-module-name}:\br + pp-module-name\opt{} pp-module-name-token +\end{bnf} + +\begin{bnf} +\nonterminal{pp-module-name-token}:\br + \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{;}} +\end{bnf} + +\alinea +A sequence of \grammarterm{preprocessing-token}{s} matching the form +of a \grammarterm{pp-import} +instructs the preprocessor to import macros from the legacy header unit +(\ref{dcl.module.import}) denoted by the \grammarterm{header-name}. +The \tcode{;} \grammarterm{preprocessing-token} shall not be produced by +macro replacement (\stdref{cpp.replace}{19.3}). +The \term{point of macro import} for a \grammarterm{pp-import} is +immediately after the \tcode{;} terminating the preprocessing preamble +(see below) if the import occurs within the preprocessing preamble, and +immediately after the \tcode{;} terminating the \grammarterm{pp-import} +otherwise. + +\alinea +A \term{macro directive} for a macro name is a \tcode{\#define} or +\tcode{\#undef} directive naming that macro name. +An \term{exported macro directive} is +a macro directive occuring in a legacy header unit +whose macro name is not lexically identical to a keyword. +A macro directive is \term{visible} at a source location +if it precedes that source location in the same translation unit, or +if it is an exported macro directive whose legacy header unit, +or a legacy header unit that transitively imports it, +is imported into the current translation unit by a \grammarterm{pp-import} +whose point of macro import precedes that source location. + +\color{addclr} +\alinea +Multiple macro directives for a macro name may be visible at the same +source location. +The interpretation of a macro name is determined as follows: +\begin{itemize} +\item +\color{addclr} +A macro directive \term{overrides} all macro directives for the same name +that are visible at the point of the directive. +\item +\color{addclr} +A macro directive is \term{active} if it is visible and +no visible macro directive overrides it. +\item +\color{addclr} +A set of macro directives is \term{consistent} if it consists of only +\tcode{\#undef} directives or if all \tcode{\#define} directives in the set +are valid as redefinitions of the same macro. +\end{itemize} +\color{addclr} +When a \grammarterm{preprocessing-token} matching the macro name of a visible +macro directive is encountered, the set of active macro directives for that +macro name shall be consistent, and semantics of the active macro directives +determine whether the macro name is defined and the behavior of macro +replacement. +\enternote +The relative order of \grammarterm{pp-import}{s} has no bearing on whether a +particular macro definition is active. +\exitnote + +\color{addclr} +\alinea +The \term{preprocessing preamble} of a translation unit is +the longest sequence of \grammarterm{preprocessing-token}{s} matching +the syntax of \grammarterm{pp-preamble} +beginning with the first \tcode{module} token that is +neither preceded by \tcode{extern} (\ref{dcl.module.proclaim}) +nor followed by \tcode{;}. +If there is no such sequence of tokens, +the translation unit has no preprocessing preamble. +Within the preprocessing preamble, the tokens \tcode{export} and \tcode{import} +shall not be produced by macro replacement. +If an \tcode{import} \grammarterm{preprocessing-token} +appears after the end of the preprocessing preamble, +the program is ill-formed. +\enternote +The preamble always terminates with a semicolon token. +A \tcode{\#if} directive immediately following the end of the preamble +can expand macros imported by a \grammarterm{pp-import} within the +preamble; if that results in encountering additional +\grammarterm{preprocessing-token}{s} matching the syntax of a +\grammarterm{pp-import}, the preamble is not extended to include +those tokens because doing so would not form a valid preprocessing preamble. +\begin{example} +\begin{codeblock} +// macros.h +#define GOT_MACRO 1 + +// TU M +module M; +import "macros.h"; +#if GOT_MACRO +import "other.h"; +#endif +\end{codeblock} +The preprocessing preamble ends at the \tcode{;} of the first \tcode{import}. +As a consequence, the program is ill-formed because \tcode{import "other.h";} +appears after the preprocessing preamble. +The preprocessing preamble cannot extend to include the second \tcode{import}, +because if it did, the macro \tcode{GOT_MACRO} would not be defined in the +context of the \tcode{\#if}. +\end{example} +\exitnote +\end{std.txt} + +\end{after} diff --git a/src/templates.tex b/src/templates.tex index 9f1a4b7..facca9d 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -195,9 +195,7 @@ \enterexample \begin{codeblock} // Module interface unit of M1 - @\begin{after}\color{addclr} - module; - \end{after}@ + @\begin{after}\color{addclr}module;\end{after}@ #include export module M1; @@ -207,9 +205,7 @@ } // Module interface unit of M2 - @\begin{after}\color{addclr} - module; - \end{after}@ + @\begin{after}\color{addclr}module;\end{after}@ #include struct Aux : std::ctype_base { operator int() const; diff --git a/src/ts.tex b/src/ts.tex index a9cba09..2c37c7d 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -126,6 +126,7 @@ \include{classes} \include{overloading} \include{templates} +\include{preprocessor} %%-------------------------------------------------- From 73ac09f6bbdc95a9a6a56620e0af933f0d0172ba Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 15 May 2018 17:49:48 -0700 Subject: [PATCH 03/77] Add #include translation rule. --- src/preprocessor.tex | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/preprocessor.tex b/src/preprocessor.tex index bede3b2..8a2b3d2 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -18,7 +18,31 @@ because conceptually they occur before translation of the resulting translation unit. \end{std.txt} +\end{after} + +\setcounter{section}{1} +\rSec1[cpp.include]{Source file inclusion}% +\begin{after} +Add a new paragraph after 19.2/6 as follows: + +\begin{std.txt} +\resetalinea[6] +\color{addclr} +\alinea +If the header identified by the \grammarterm{header-name} +denotes a legacy header unit, the preprocessing directive +is instead replaced by the \grammarterm{preprocessing-token}{s} +\begin{bnf} +\terminal{import} header-name \terminal{;} +\end{bnf} +\color{addclr} +How the set of headers denoting legacy header units is specified +is implementation-defined. +\end{std.txt} +\end{after} + +\begin{after} \noindent Add a new subclause 19.3 titled ``\textbf{Legacy header units}'' as follows: @@ -64,6 +88,7 @@ \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{;}} \end{bnf} +\color{addclr} \alinea A sequence of \grammarterm{preprocessing-token}{s} matching the form of a \grammarterm{pp-import} @@ -77,6 +102,8 @@ immediately after the \tcode{;} terminating the \grammarterm{pp-import} otherwise. +\noindent % force para to begin so color applies to para number +\color{addclr} \alinea A \term{macro directive} for a macro name is a \tcode{\#define} or \tcode{\#undef} directive naming that macro name. @@ -90,7 +117,6 @@ is imported into the current translation unit by a \grammarterm{pp-import} whose point of macro import precedes that source location. -\color{addclr} \alinea Multiple macro directives for a macro name may be visible at the same source location. From d2b044dd3f14af1fb926861a2f773e56fb439cc0 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 16 May 2018 18:02:32 -0700 Subject: [PATCH 04/77] Fix grammar and recognition of preamble. --- src/preprocessor.tex | 69 +++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 8a2b3d2..90af813 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -54,38 +54,29 @@ \color{addclr} \begin{bnf} \nonterminal{pp-import}:\br - \terminal{export}\opt{} \terminal{import}\opt{} header-name pp-attrs\opt{} \terminal{;} + \terminal{export}\opt{} \terminal{import}\opt{} header-name pp-decl-suffix\opt{} \terminal{;} \end{bnf} \begin{bnf} -\nonterminal{pp-attrs}:\br - pp-attrs\opt{} \terminal{[} \terminal{[} pp-attr-tokens \terminal{]} \terminal{]} +\nonterminal{pp-decl-suffix}:\br + pp-decl-suffix\opt{} pp-decl-suffix-token\br + pp-decl-suffix\opt{} \terminal{[} pp-bracketed-tokens \terminal{]} \end{bnf} \begin{bnf} -\nonterminal{pp-attr-tokens}:\br - pp-attr-tokens\opt{} pp-attr-token +\nonterminal{pp-decl-suffix-token}:\br + \descr{any \grammarterm{preprocessing-token} other than \terminal{[}, \terminal{]}, or \terminal{;}} \end{bnf} \begin{bnf} -\nonterminal{pp-attr-token}:\br - \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{]}} -\end{bnf} - -\begin{bnf} -\nonterminal{pp-preamble}:\br - \terminal{module}\opt{} pp-module-name pp-attrs\opt{} \terminal{;} - pp-preamble pp-import +\nonterminal{pp-bracketed-tokens}:\br + pp-bracketed-tokens\opt{} pp-bracketed-token\br + pp-bracketed-tokens\opt{} \terminal{[} pp-bracketed-tokens \terminal{]} \end{bnf} \begin{bnf} -\nonterminal{pp-module-name}:\br - pp-module-name\opt{} pp-module-name-token -\end{bnf} - -\begin{bnf} -\nonterminal{pp-module-name-token}:\br - \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{;}} +\nonterminal{pp-bracketed-token}:\br + \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{]}} \end{bnf} \color{addclr} @@ -102,18 +93,20 @@ immediately after the \tcode{;} terminating the \grammarterm{pp-import} otherwise. -\noindent % force para to begin so color applies to para number \color{addclr} \alinea A \term{macro directive} for a macro name is a \tcode{\#define} or \tcode{\#undef} directive naming that macro name. An \term{exported macro directive} is a macro directive occuring in a legacy header unit +\color{addclr} whose macro name is not lexically identical to a keyword. A macro directive is \term{visible} at a source location if it precedes that source location in the same translation unit, or if it is an exported macro directive whose legacy header unit, -or a legacy header unit that transitively imports it, +or a legacy header unit that +\color{addclr} +transitively imports it, is imported into the current translation unit by a \grammarterm{pp-import} whose point of macro import precedes that source location. @@ -147,21 +140,39 @@ particular macro definition is active. \exitnote +\begin{bnf} +\nonterminal{pp-preamble}:\br + \terminal{module} pp-decl-suffix \terminal{;}\br + pp-preamble \terminal{export}\opt{} \terminal{import} pp-decl-suffix \terminal{;} +\end{bnf} + +%%% FIXME: Non-modular sources have no preamble. This matches +%%% the Modules TS rule, not the Atom rule. However, this is +%%% necessary to support imports within the global module, +%%% which the Modules TS relies on. +%%% +%%% We should look into a better compromise here. Is there some +%%% way we can distinguish between the Modules TS case and the +%%% Atom case? Maybe we should simply not allow them to be mixed +%%% in the same TU? \color{addclr} \alinea The \term{preprocessing preamble} of a translation unit is -the longest sequence of \grammarterm{preprocessing-token}{s} matching -the syntax of \grammarterm{pp-preamble} +a sequence of \grammarterm{preprocessing-token}{s} beginning with the first \tcode{module} token that is neither preceded by \tcode{extern} (\ref{dcl.module.proclaim}) -nor followed by \tcode{;}. -If there is no such sequence of tokens, +nor followed by \tcode{;}, +and ending at the last \tcode{;} token such that +the preprocessing preamble forms a \grammarterm{pp-preamble}. +If there is no such \tcode{module} token, the translation unit has no preprocessing preamble. -Within the preprocessing preamble, the tokens \tcode{export} and \tcode{import} -shall not be produced by macro replacement. -If an \tcode{import} \grammarterm{preprocessing-token} +Otherwise, if there is no such \grammarterm{pp-preamble} +or if an \tcode{import} \grammarterm{preprocessing-token} appears after the end of the preprocessing preamble, the program is ill-formed. +Within the preprocessing preamble, the tokens +\tcode{export} and \tcode{import} +shall not be produced by macro replacement. \enternote The preamble always terminates with a semicolon token. A \tcode{\#if} directive immediately following the end of the preamble From 68df4fc126a1b8899a053c33d293578e7e6a1ce3 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 16 May 2018 18:02:45 -0700 Subject: [PATCH 05/77] Use the Modules TS rule rather than the Atom rule for semantic effects of Atom legacy header imported within the Modules TS global module fragment. Eg, in: import "foo.h"; // provides Foo and Bar export module M; export using Foo = ::Foo; M exports the semantic effects of Foo and not of Bar, just as it would if we #included "foo.h" instead. --- src/declarations.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/declarations.tex b/src/declarations.tex index b62cf46..0927525 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -965,7 +965,9 @@ \begin{itemize}\color{addclr} \item it is declared prior to that program point in the same translation unit, or \item it is declared in the purview of a module interface unit of a module - that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}), or + that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}), + for which all indirect \grammarterm{import-declaration}{s} appear within the + purview of the enclosing module unit, or \item it is declared in the preamble of a module interface unit of a module that is directly or indirectly imported prior to that program point From ff5874c53f3019ad4e3d58ab9775fe3e1acfe385 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 25 May 2018 18:43:54 -0700 Subject: [PATCH 06/77] Updates from review feedback. --- src/basic.tex | 6 +- src/declarations.tex | 373 ++++++++++++++++++++++++++++++------------- src/lexical.tex | 5 +- src/macros.tex | 4 +- src/preprocessor.tex | 5 +- src/ts.tex | 2 +- 6 files changed, 272 insertions(+), 123 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 9af7106..95413f2 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -393,10 +393,10 @@ \color{addclr} \item[---] - \begin{before} + %\begin{before} \added{In resolving dependent names (17.6.4), any} - \end{before} - \begin{after}\added{Any}\end{after} + %\end{before} + %\begin{after}\added{Any}\end{after} \added{function or function template that is owned by a named module \tcode{M} (10.7), that is declared in} diff --git a/src/declarations.tex b/src/declarations.tex index 0927525..bb13fc8 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -256,6 +256,58 @@ shall be directly or indirectly exported by the primary module interface unit (\ref{dcl.module.export}). No diagnostic is required for a violation of these rules. +\enternote +Module partitions can only be imported by +other module units in the same module. +The division of a module into module units +is not visible outside the module. +\exitnote +\end{after} + +\begin{after}\color{addclr} +\alinea +\begin{example} +\begin{codeblock} +// TU 1 +export module A; +export import :Foo; +export int baz(); +\end{codeblock} + +\begin{codeblock} +// TU 2 +export module A:Foo; +import :Internals; +export int foo() { return 2 * (bar() + 1); } +\end{codeblock} + +\begin{codeblock} +// TU 3 +module A:Internals; +int bar(); +\end{codeblock} + +\begin{codeblock} +// TU 4 +module A; +import :Internals; +int bar() { return baz() - 10; } +int baz() { return 30; } +\end{codeblock} + +Module \tcode{A} contains four translation units: +\begin{itemize} +\item a primary module interface unit, +\item a module partition \tcode{A:Foo}, which is a module interface unit +forming part of the interface of module \tcode{A}, +\item a module partition \tcode{A:Internals}, which does not contribute +to the external interface of module \tcode{A}, and +\item an implementation module unit providing +a definition of \tcode{bar} and \tcode{baz}, +which cannot be imported because +it does not have a partition name. +\end{itemize} +\end{example} \end{after} \alinea @@ -390,6 +442,34 @@ nor a \grammarterm{module-partition} implicitly imports the primary module interface unit of the module as if by a \grammarterm{module-import-declaration}. +\begin{example} +\begin{codeblock} +// TU 1 +export module B; +import :Y; // OK, does not create interface dependency cycle +int n = y(); +\end{codeblock} + +\begin{codeblock} +// TU 2 +module B:X; // does not implicitly import \tcode{B} +int &a = n; // error: \tcode{n} not visible here +import B; +int &b = n; // OK +\end{codeblock} + +\begin{codeblock} +// TU 3 +module B:Y; // does not implicitly import \tcode{B} +int y(); +\end{codeblock} + +\begin{codeblock} +// TU 4 +module B; // implicitly imports \tcode{B} +int &c = n; // OK +\end{codeblock} +\end{example} \end{after} \end{std.txt} @@ -673,18 +753,27 @@ \alinea A \grammarterm{module-import-declaration} nominating a \grammarterm{header-name} $H$ behaves as if it imports - a synthesized \term{legacy header unit} defined as follows: - + a synthesized \term{legacy header unit}, + which is a module whose abstract semantics graph + comprises the result of applying + phases 1 to 7 of translation (\stdref{lex.phases}{5.2}) + to the source file nominated by $H$, and + treating all declarations therein as being + exported and attached to the global module. + \enternote + The legacy header unit for $H$ is equivalent to \begin{codeblock}\color{addclr} export module @\textit{unique}@ ; export extern "C++" { #include @$H$@ - } - \end{codeblock} - + }\end{codeblock} where \textit{unique} is a \grammarterm{module-name} - different from every \tcode{module-name} - used in the program, and where two + different from every \grammarterm{module-name} + used in the program, + except that the \grammarterm{linkage-specification} cannot be + terminated by an included \tcode{\}} token. + \exitnote + Two \grammarterm{module-import-declaration}{s} import the same legacy header unit if and only if their \grammarterm{header-name}{s} identify the same @@ -692,25 +781,23 @@ \enternote A \grammarterm{module-import-declaration} nominating a \grammarterm{header-name} is also recognized by the - preprocessor and may result in one or more macros being - made available (\ref{cpp.module}). + preprocessor, and results in macros defined at the + end of phase 4 of translation of the legacy header unit + being made visible as described in \ref{cpp.module}. \exitnote Within a legacy header unit, certain semantic restrictions are relaxed: \begin{itemize} - \item A \grammarterm{module-import-declaration} may appear - in the purview of the module, and is considered to be exported. + \item A \grammarterm{module-import-declaration} may appear, + and is considered to be exported. \item A declaration of a name with internal linkage is - permitted within the synthesized - \grammarterm{export-declaration}. If such a name is + permitted despite all declarations being implicitly exported. + If such a name is odr-used by a translation unit outside the legacy header unit, or by an instantiation unit for a template instantiation whose point of instantiation is outside the legacy header unit, the program is ill-formed. \end{itemize} - The \grammarterm{linkage-specification} shall not be - terminated by an included \tcode{\}} token preceding - the synthesized \tcode{\}} token. \end{after} \alinea @@ -718,12 +805,12 @@ Importing a translation unit $M$ \end{after} makes every citation and every - \begin{before}\color{addclr} + %\begin{before}\color{addclr} exported declaration - \end{before} - \begin{after}\color{addclr} - exported name - \end{after} + %\end{before} + %\begin{after}\color{addclr} + %exported name + %\end{after} from the abstract semantics graph of $M$ available, as a citation, %makes exported declarations from the interface of the nominated module visible @@ -961,44 +1048,32 @@ semantic properties. \begin{after}\color{addclr} \alinea - A semantic property is \term{reachable} from a program point if + A declaration is \term{reachable} from a program point if \begin{itemize}\color{addclr} - \item it is declared prior to that program point in the same translation unit, or - \item it is declared in the purview of a module interface unit of a module + \item it appears prior to that program point in the same translation unit, or + \item it appears in the purview of a module interface unit of a module that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}), for which all indirect \grammarterm{import-declaration}{s} appear within the purview of the enclosing module unit, or - \item it is declared in the preamble of a module interface unit of a module + \item it appears in the preamble of a module interface unit of a module that is directly - or indirectly imported prior to that program point - and is a reachable semantic property of an exported declaration - in that translation unit as described below. + or indirectly imported prior to that program point, + and there is a path from an exported declaration to it + in the abstract semantics graph of that module interface unit. \end{itemize} - When the semantic properties of an entity are examined, - all properties that are reachable from - the point of inquiry are found, - even if the declaration introducing the property - is not visible to unqualified lookup. -\begin{example} -\begin{codeblock} -module; -struct X {}; -export module A; -export using Y = X; - -module B; -import A; -Y y; // OK, definition of \tcode{X} is reachable -X x; // ill-formed: \tcode{X} not visible to unqualified lookup -\end{codeblock} -\end{example} \end{after} \alinea +\begin{before}\color{addclr} Except as noted below, the +\end{before} +\begin{after}\color{addclr} +The +\end{after} \term{reachable semantic properties} of declset $D$ (or of the entity, if any, denoted by that declset) of the abstract semantic graph of $M$ from $TU$ are +\begin{before}\color{addclr} \begin{itemize} \item if $D$ contains at least one exported declaration, the semantic properties cumulatively obtained in the context @@ -1020,56 +1095,124 @@ % restricted to % the semantic properties cumulatively obtained in % the context of the exported declaration members of $D$ in $M$. +\end{before} +\begin{after}\color{addclr} + the semantic properties of all reachable declarations in $D$. + When the semantic properties of an entity are examined, + all properties that are reachable from + the point of inquiry are found, + even if the declaration introducing the property + is not visible to unqualified lookup. +\begin{example} +\begin{codeblock} +module; +struct X {}; +export module A; +export using Y = X; + +module B; +import A; +Y y; // OK, definition of \tcode{X} is reachable +X x; // ill-formed: \tcode{X} not visible to unqualified lookup +\end{codeblock} +\end{example} + +\alinea +\end{after} \enternote These reachable semantic properties include type completeness, type definitions, initializers, default arguments of functions or template declarations, attributes, - visibility to normal lookup, entities that are direct targets of edges - emanating from $D$ in the abstract semantics graph of $M$, etc. + visibility to normal lookup, +\begin{before}\color{addclr} + entities that are direct targets of edges + emanating from $D$ in the abstract semantics graph of $M$, +\end{before} + etc. Since default arguments are evaluated in the context of the call expression, reachable semantic properties of the corresponding parameter types apply in that context. \begin{example} - \begin{codeblock} - // TU 1 - @\begin{after}\color{addclr} - module; - \end{after}@ - struct F { int f { 42 }; }; - export module M; - export using T = F; - export struct A { int i; }; - export int f(int, A = { 3 }); - - export struct B; // exported as incomplete type - struct B { // definition not exported - operator int(); - }; - export int g(B = B{}); - export int h(int = B{}); // \#1 - - export struct S { - static constexpr int v(int); - }; - - export S j(); // S attendant entity of j() - constexpr int S::v(int x) { return 2 * x; } - +\begin{before}\color{addclr} +\begin{codeblock} +// TU 1 +struct F { int f { 42 }; }; +export module M; +export using T = F; +export struct A { int i; }; +export int f(int, A = { 3 }); + +export struct B; // exported as incomplete type +struct B { // definition not exported + operator int(); +}; +export int g(B = B{}); +export int h(int = B{}); // \#1 + +export struct S { + static constexpr int v(int); +}; + +export S j(); // S attendant entity of j() +constexpr int S::v(int x) { return 2 * x; } + + +// TU 2 +import M; +int main() { + T t { }; // OK: reachable semantic properties of T include completeness. + auto x = f(42); // OK: default argument A\{3\} evaluated here. + auto y = h(); // OK: completeness of B only checked at \#1. + auto z = g(); // error: parameter type incomplete here. + constexpr auto a = decltype(j())::v(3); // OK: S::v defined + // in the abstract semantics graph of M (\ref{dcl.fct.spec}) +} +\end{codeblock} +\end{before} +\begin{after}\color{addclr} +\begin{codeblock} +// TU 1 +module M:B; +struct B { // definition not exported + operator int(); +}; - // TU 2 - import M; - int main() { - T t { }; // OK: reachable semantic properties of T include completeness. - auto x = f(42); // OK: default argument A\{3\} evaluated here. - auto y = h(); // OK: completeness of B only checked at \#1. - auto z = g(); // error: parameter type incomplete here. - constexpr auto a = decltype(j())::v(3); // OK: S::v defined - // in the abstract semantics graph of M (\ref{dcl.fct.spec}) - } - \end{codeblock} +// TU 2 +module; +struct F { int f { 42 }; }; +export module M; +import :B; +export using T = F; // earlier definition of F now reachable +export struct A { int i; }; +export int f(int, A = { 3 }); + +export struct B; // exported as incomplete type +export int g(B = B{}); +export int h(int = B{}); // \#1 + +export struct S { + static constexpr int v(int); +}; + +export S j(); +constexpr int S::v(int x) { return 2 * x; } + +// TU 2 +import M; +int main() { + T t { }; // OK: reachable semantic properties of T include completeness + auto x = f(42); // OK: default argument A\{3\} evaluated here + auto y = h(); // OK: completeness of B only checked at \#1 + auto z = g(); // error: parameter type incomplete here + constexpr auto a = decltype(j())::v(3); // OK: S::v defined + // in the abstract semantics graph of M (\ref{dcl.fct.spec}) +} +\end{codeblock} +\end{after} \end{example} \exitnote +\begin{before}\color{addclr} \alinea Within a module interface unit, it is necessary to determine that the declarations being exported collectively present a coherent view of @@ -1079,6 +1222,7 @@ The reachable semantics properties of an entity, the declarations of which are made available via a \grammarterm{module-import-declaration}, are determined by its owning module and are unaffected by the importing module. +\end{before}\begin{before}\color{addclr} \begin{example} \begin{codeblock} // module interface of M1 @@ -1098,7 +1242,7 @@ \end{codeblock} \end{example} \exitnote - +\end{before}\begin{before}\color{addclr} For each declaration $D$ exported from the module interface unit of a module $M$, there is a set of zero or more \term{attendant entities} defined as follows: @@ -1124,22 +1268,22 @@ \item Otherwise, the set of attendant entities is empty. \end{itemize} - +\end{before}\begin{before}\color{addclr} The \term{set of attendant entities determined by} a type $T$ is defined as follows (exactly one of these cases matches): \begin{itemize} - \item If $T$ is a fundamental type, then + \item\color{addclr} If $T$ is a fundamental type, then the set of attendant entities is empty. - % \item If $T$ is a dependent type denoted by a \grammarterm{typename-specifier} + % \item\color{addclr} If $T$ is a dependent type denoted by a \grammarterm{typename-specifier} % where the \grammarterm{nested-name-specifier} itself denotes a dependent type, % then the set of attendant entities is the set of attendant entities determined by % that type. - \item If $T$ is a member of an unknown specialization, the set of + \item\color{addclr} If $T$ is a member of an unknown specialization, the set of attendant entities is the set of attendant entities determined by that unknown specialization. - \item If $T$ is a class type owned by $M$, the set of attendant entities includes + \item\color{addclr} If $T$ is a class type owned by $M$, the set of attendant entities includes $T$ itself, the union of the sets of the attendant entities determined by its direct base classes owned by $M$, the sets of the attendant entities of its data members, static data member templates, @@ -1153,28 +1297,28 @@ used as template template-arguments, the sets of the attendant entities determined by the types of the non-type template-arguments. - \item If $T$ is an enumeration type owned by $M$, + \item\color{addclr} If $T$ is an enumeration type owned by $M$, the set of attendant entities is the singleton $\{T\}$. - \item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, + \item\color{addclr} If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the set of attendant entities is the set of attendant entities determined by $U$. - \item If $T$ is a function type, the set of attendant entities is the + \item\color{addclr} If $T$ is a function type, the set of attendant entities is the union of the set of attendant entities determined by the function parameter types and the return type. - \item if $T$ is a pointer to data member of class $X$, the set of attendant + \item\color{addclr} if $T$ is a pointer to data member of class $X$, the set of attendant entities is the union of the set of attendant entities of the member type and the set of attendant entities determined by $X$. - \item If $T$ is a pointer to member function type of a class $X$, the + \item\color{addclr} If $T$ is a pointer to member function type of a class $X$, the set of attendant entities is the union of the set of attendant entities determined by $X$ and the set of attendant entities determined by the function type. - \item Otherwise, the set of attendant entities is empty. + \item\color{addclr} Otherwise, the set of attendant entities is empty. \end{itemize} - +\end{before}\begin{before}\color{addclr} If a class template $X$ is an attendant entity, then its reachable semantic properties include all the declarations of the primary class template, its partial specializations, and its explicit specializations in the @@ -1228,16 +1372,16 @@ } \end{codeblock} \end{example} - +\end{before}\begin{before}\color{addclr} \alinea If $X$ is an attendant entity of two exported declarations designating two distinct entities, - \begin{after}\color{addclr} + %\begin{after}\color{addclr} and $X$ is declared in the purview of the global module, - \end{after} + %\end{after} its reachable semantic properties shall be the same at the points where the declarations occur. - \begin{before}\color{addclr} + %\begin{before}\color{addclr} \begin{example} \begin{codeblock} export module M; @@ -1247,18 +1391,19 @@ export S g(); // error: class type S has different properties from \#1 \end{codeblock} \end{example} - \end{before} + %\end{before} - \begin{after}\color{addclr} - \begin{example} - \begin{codeblock} - module; - struct S; - export module M; - export S f(); // \#1 - extern "C++" struct S { }; - export S g(); // error: class type S has different properties from \#1 - \end{codeblock} - \end{example} - \end{after} +% \begin{after}\color{addclr} +% \begin{example} +% \begin{codeblock} +% module; +% struct S; +% export module M; +% export S f(); // \#1 +% extern "C++" struct S { }; +% export S g(); // error: class type S has different properties from \#1 +% \end{codeblock} +% \end{example} +% \end{after} +\end{before} \end{std.txt} diff --git a/src/lexical.tex b/src/lexical.tex index 921f655..cb8c97b 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -447,8 +447,9 @@ even if that would cause further lexical analysis to fail, except that a \grammarterm{header-name} (5.8) is only formed -\added{immediately after a \grammarterm{preprocessing-token} -that is lexically identical to the \tcode{import} \grammarterm{keyword}, or} +\added{when the previous preprocessing token +was lexically identical to the +\grammarterm{identifier} \tcode{import}, or} within a \tcode{\#include} directive (19.2). \end{std.txt} \end{after} diff --git a/src/macros.tex b/src/macros.tex index 069dec3..88abf1a 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -512,13 +512,13 @@ \newcommand{\defncontext}[1]{\textlangle#1\textrangle} \newenvironment{before}{ -\begin{tcolorbox}[breakable,colback=red!5!white,colframe=red!75!black,title=Before] +\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black,title=Before] }{ \end{tcolorbox} } \newenvironment{after}{ -\begin{tcolorbox}[breakable,colback=green!5!white,colframe=green!75!black,title=After] +\begin{tcolorbox}[colback=green!5!white,colframe=green!75!black,title=After] }{ \end{tcolorbox} } diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 90af813..0c78fdd 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -139,7 +139,11 @@ The relative order of \grammarterm{pp-import}{s} has no bearing on whether a particular macro definition is active. \exitnote +\end{std.txt} +\end{after} +\begin{after}\color{addclr} +\begin{std.txt} \begin{bnf} \nonterminal{pp-preamble}:\br \terminal{module} pp-decl-suffix \terminal{;}\br @@ -155,7 +159,6 @@ %%% way we can distinguish between the Modules TS case and the %%% Atom case? Maybe we should simply not allow them to be mixed %%% in the same TU? -\color{addclr} \alinea The \term{preprocessing preamble} of a translation unit is a sequence of \grammarterm{preprocessing-token}{s} diff --git a/src/ts.tex b/src/ts.tex index 2c37c7d..ac2612e 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -47,7 +47,7 @@ \usepackage{memhfixc} % fix interactions between hyperref and memoir \usepackage{xstring} \usepackage{tcolorbox} -\tcbuselibrary{breakable} +%\tcbuselibrary{breakable} \input{layout} \input{styles} From e0210a0a3d24ab032c92e5b627c5705799f03728 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 31 May 2018 19:01:57 -0700 Subject: [PATCH 07/77] Reorganize: add parts and expand on the background a little. --- src/cover-wd.tex | 27 --------------------------- src/front.tex | 2 -- src/scope.tex | 2 +- src/ts.tex | 18 +++++++++++++++--- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/src/cover-wd.tex b/src/cover-wd.tex index e1ea908..5a451b4 100644 --- a/src/cover-wd.tex +++ b/src/cover-wd.tex @@ -19,34 +19,7 @@ \hfill\begin{minipage}{\hdwidth}\hd\end{minipage} \endgroup -\vspace{2.5cm} \begin{center} \textbf{\Huge Merging Modules} \end{center} - -This document presents the changes to be applied to the Modules TS in order -to merge the features of the Atom proposal, as directed by Evolution at the -Jacksonville 2018 committee meeting. - -A note aboute stylistic conventions: as this document describes a ``diff of -a diff,'' the usual convention of using text style for \added{added} and -\removed{removed} text does not work well. In its place, we use block-style -diffs showing the text of the Modules TS before and after this document is -applied: - -\begin{before} -Here is some text from the \Cpp standard -\added{with some additions from the Modules TS}. -\end{before} - -\begin{after} -Here is some text from the \Cpp standard -\added{with some additions from the Modules TS} -\added{and some more from the Atom proposal}. -\end{after} - -Unchanged text from the Modules TS is retained in this document so that a -complete picture of the ``after'' wording may be obtained by simply ignoring -the ``before'' regions. -\newpage diff --git a/src/front.tex b/src/front.tex index 8f8abbb..723453b 100644 --- a/src/front.tex +++ b/src/front.tex @@ -1,6 +1,4 @@ %!TEX root = ts.tex -\input{cover-wd} -%\input{cover-reg} %%-------------------------------------------------- %% The table of contents, list of tables, and list of figures diff --git a/src/scope.tex b/src/scope.tex index 946fbfb..9d7fce2 100644 --- a/src/scope.tex +++ b/src/scope.tex @@ -1,4 +1,4 @@ - +\setcounter{chapter}{0} \rSec0[intro.scope]{Scope} \pnum diff --git a/src/ts.tex b/src/ts.tex index ac2612e..4cc0c67 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -109,13 +109,25 @@ %%-------------------------------------------------- %% front matter \frontmatter -\include{front} +\input{cover-wd} +\input{front} -%%-------------------------------------------------- -%% main body of the document \mainmatter \setglobalstyles +%%-------------------------------------------------- +%% part 1: design and commentary +\begin{KeepFromToc} +\part[Commentary]{Design and commentary}\label{commentary} + +\input{bg} + +\end{KeepFromToc} + +%%-------------------------------------------------- +%% part 2: wording +\part[Wording]{Wording for merging Atom into the Modules TS}\label{wording} + \include{scope} \include{references} \include{definitions} From 46b97e9021ae82072ef1eb493f7670aedacef928 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 31 May 2018 19:29:16 -0700 Subject: [PATCH 08/77] Updated based on discussion with GDR: - partially estore the Modules TS rule that allows a mix of exported and non-exported declarations of the same entity - exported declarations must precede non-exported declarations - for a non-exported declaration, use the Atom "all declarations are reachable" rule; for an exported declaration, only the exported declarations are reachable Plus some fixes for module partition semantics with regard to reachability. --- src/declarations.tex | 50 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index bb13fc8..e1918cb 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -573,6 +573,22 @@ \end{example} \exitnote + \begin{after}\color{addclr} + \alinea + The \grammarterm{declaration} in an \grammarterm{export-declaration} + shall not be a redeclaration of + a non-exported \grammarterm{declaration}. + \begin{example} + \begin{codeblock} + export module M; + export struct S; + struct S { int n; }; + export typedef S S; // OK, not a redeclaration of \tcode{struct S} + export struct S; // error: exported declaration follows non-exported definition + \end{codeblock} + \end{example} + \end{after} + \alinea An \grammarterm{export-declaration} of the form \begin{grammar} @@ -1048,19 +1064,37 @@ semantic properties. \begin{after}\color{addclr} \alinea + A module unit is \term{reachable} from a program point if + it appears in the purview of a module unit + that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}) + by a path of + \grammarterm{module-declaration}{s}% + \footnote{\color{addclr}% + A \grammarterm{module-declaration} containing neither \tcode{export} + nor a \grammarterm{module-partition} is considered to import the named module.} + and + \grammarterm{import-declaration}{s}, + for which all declarations other than the first + are either exported or + appear within the same module as the program point. A declaration is \term{reachable} from a program point if \begin{itemize}\color{addclr} \item it appears prior to that program point in the same translation unit, or - \item it appears in the purview of a module interface unit of a module - that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}), - for which all indirect \grammarterm{import-declaration}{s} appear within the - purview of the enclosing module unit, or - \item it appears in the preamble of a module interface unit of a module - that is directly - or indirectly imported prior to that program point, + \item it appears in the purview of a reachable module unit and either + \begin{itemize} + \item the declaration is exported, or + \item the declaration is not exported and is not a redeclaration of + an exported entity, or + \item the declaration appears in the same module as the program point, + \end{itemize} + or + \item it appears in the preamble of a reachable module unit, and there is a path from an exported declaration to it - in the abstract semantics graph of that module interface unit. + in the abstract semantics graph of that module unit. \end{itemize} + A declaration is considered to appear in the same module as a program point + if the program point is in the purview of a module and + the declaration appears within a module unit of that module. \end{after} \alinea From dd04e9dd471d670dc5a2c294027dff9a20ff0823 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 1 Jun 2018 19:04:04 -0700 Subject: [PATCH 09/77] Add background and description of merged proposal. --- src/bg.tex | 626 +++++++++++++++++++++++++++++++++++++++++++++++ src/config.tex | 10 +- src/cover-wd.tex | 2 +- src/macros.tex | 3 +- 4 files changed, 634 insertions(+), 7 deletions(-) create mode 100644 src/bg.tex diff --git a/src/bg.tex b/src/bg.tex new file mode 100644 index 0000000..4912392 --- /dev/null +++ b/src/bg.tex @@ -0,0 +1,626 @@ +\setcounter{chapter}{0} +\rSec0[bg]{Background} + +\rSec1[bg.intro]{Introduction} + +At the Jacksonville 2018 committee meeting, +P0947R0 (``Another Take On Modules'', +hereafter referred to as \term{Atom}) +was presented. Two options were polled: + +\begin{itemize} +\item merging the Atom proposal with the Modules TS, and +\item progressing the Atom proposal as a separate TS. +\end{itemize} + +Both options passed, but the first option had stronger support. +This paper describes our effort in merging the two proposals +and the remaining outstanding questions from the merge, +and provides wording for the resulting merged specification. + +\rSec1[bg.conventions]{Stylistic conventions} + +The wording section of this document describes a ``diff of a diff.'' +The usual convention of using text style for \added{added} and +\removed{removed} text does not work well for such situations. +In its place, we use block-style diffs +showing the text of the Modules TS +before and after this document is applied: + +\begin{before} +Here is some text from the \Cpp standard +\added{with some additions from the Modules TS}. +\end{before} + +\begin{after} +Here is some text from the \Cpp standard +\added{with some additions from the Modules TS} +\added{and some more from the Atom proposal}. +\end{after} + +Unchanged text from the Modules TS is retained in this document so that a +complete picture of the ``after'' wording may be obtained by simply ignoring +the ``before'' regions. + +\rSec0[merged]{Summary of merged proposal} + +\rSec1[merged.basic]{Basics} + +\pnum +A \term{module unit} begins with a preamble, +comprising a module declaration +and a sequence of imports: + +\begin{codeblock} +export@\opt@ module foo; +import a; +export import b; +// ... more imports ... +\end{codeblock} + +Within a module unit, imports may only appear within the preamble. +The \tcode{export} keyword indicates that a module unit is a +\term{module interface unit}, which defines the interface for the module. +For a module \tcode{foo}, there must be exactly one +translation unit whose preamble contains \tcode{export module foo;}. +This is the \term{primary module interface unit} +for \tcode{foo}~(\ref{merged.part}). + +\pnum +Imports control which namespace-scope names are visible to name lookup, +and which namespace-scope declarations are reachable semantically. +The behavior of an entity is determined by +the set of declarations of that entity. +For example, class members and enumeration members are visible to name lookup +if there is a reachable definition of the class or enumeration. + +\pnum +A declaration can be exported by use of the \tcode{export} keyword: +\begin{codeblock} +export int a; +export { +void f(); +} +\end{codeblock} +Names introduced by exported declarations +are visible to name lookup outside the module, +in contexts that import that module. +Names introduced by non-exported declarations are not. +Likewise, exported declarations are reachable outside the module, +in contexts that import that module. +If an entity with no exported declarations +is used in the interface of an exported declaration, +all declarations of that entity +within the interface of the module +are reachable. + +\pnum +Declarations in the module interface (excluding those with internal linkage) +are visible and reachable in implementation units of the same module, +regardless of whether they are exported. + +\rSec1[merged.part]{Module partitions} + +\pnum +A complete module can be defined in a single source file. +However, the design, nature, and size of a module may warrant +dividing both the implementation and the interface +into multiple files. +Module partitions provide facilities to support this. + +\pnum +The module interface may be split across multiple files, +if desired. +Such files are called \term{module interface partition}{s}, and are +introduced by a module declaration containing a colon: + +\begin{codeblock} +export module foo:part; +\end{codeblock} + +\pnum +Module partitions behave logically like distinct modules, +except that they share ownership of contained entities +with the module that they form part of. +This allows an entity to be declared in one partition +and defined in another, +which may be necessary to resolve +dependency cycles. +It also permits code to be moved between partitions of a module +with no impact on ABI. + +\pnum +The primary module interface unit for a module is required +to transitively import and re-export all of the interface +partitions of the module. + +\pnum +When the implementation of a module is split across multiple files, +it may be desirable to share declarations between the implementation units +without including them in the module interface unit, +in order to avoid all consumers of the module +having a physical dependency on the implementation details. +(Specifically, if the implementation details change, +the module interface and its dependencies should not need to be rebuilt.) +This is made possible by \term{module implementation partition}{s}, +which are module partitions that do not form part of the module interface: + +\begin{codeblock} +module foo:part; +\end{codeblock} + +\pnum +Module implementation partitions cannot contain exported declarations; +instead, all declarations within them are visible to other translation +units in the same module that import the partition. +\begin{note} +Exportation only affects which names and declarations are visible outside +the module. +\end{note} + +\pnum +Module implementation partitions can be imported +into the interface of a module, +but cannot be exported. + +\pnum +Module interface partitions and module implementation partitions +are collectively known as \term{module partition}{s}. +Module partitions are an implementation detail of the module, +and cannot be named outside the module. +To emphasize this, an import declaration naming a module partition +cannot be given a module name, only a partition name: + +\begin{codeblock} +module foo; +import :part; // imports foo:part +import bar:part; // syntax error +import foo:part; // syntax error +\end{codeblock} + +\rSec1[merged.nonmodular]{Support for non-modular code} + +\pnum +This proposal provides several features to support +interoperation between modular code +and traditional non-modular code. + +\rSec2[merged.legacy.frag]{Global module fragment} + +\pnum +The merged proposal permits Modules TS-style global module fragments, +with the \tcode{module;} introducer proposed in P0713R1 +and approved by EWG: + +\begin{codeblock} +module; +#include "some-header.h" +export module foo; +// ... use declarations and macros from some-header.h ... +\end{codeblock} + +\pnum +Declarations from code in the global module fragment +are not owned by the module, +and are not re-exported by default. +Instead, such declarations are exported if they are referred to +by an exported declaration (transitively). +Two important special cases are that an \tcode{export using} +declaration exports both the nominated name and +all reachable declarations of that name, +and an exported function declaration exports +all reachable declarations of its return type: + +\begin{codeblock} +module; +#include "some-header.h" // defines class \tcode{X} and \tcode{Y} +export module foo; + +export using X = ::X; // export name \tcode{X}; export all declarations + // of \tcode{X} from \tcode{"some-header.h"} +export Y f(); // export name \tcode{f}; export all declarations + // of \tcode{Y} from \tcode{"some-header.h"} +\end{codeblock} + +\rSec2[merged.legacy.import]{Legacy header units} + +\pnum +The merged proposal also permits Atom-style legacy header units, +which are introduced by a special \tcode{import} syntax +that names a header file instead of a module: + +\begin{codeblock} +export module foo; +import "some-header.h"; +// ... use declarations and macros from some-header.h ... +\end{codeblock} + +\pnum +The named header is processed as if it was a source file, +the interface of the header is extracted and made available for import, +and any macros defined by preprocessing the header are saved +so that they can be made available to importers. + +\pnum +Declarations from code in a legacy module header +are not owned by any module. +In particular, the same entities can be redeclared +by another legacy header unit or by non-modular code. +Legacy module headers can be re-exported +using the regular \tcode{export import} syntax: + +\begin{codeblock} +export module foo; +export import "some-header.h"; +\end{codeblock} + +However, when a legacy header unit is re-exported, +macros are not exported. +Only the legacy header import syntax can import macros. + +\pnum +Just like declarations within a named module, +declarations within a legacy header unit +are reachable only if the legacy header unit is imported. +(There is no special rule for declarations +that are referred to by an exported declaration.) + +\rSec2[merged.nonmodular.use]{Module use from non-modular code} + +\pnum +Modules and legacy header units can be imported into non-modular code. +Such imports can appear anywhere, and are not restricted to a preamble. +This permits ``bottom-up'' modularization, +whereby a library switches to providing only a modular interface +and defining its header interface in terms of the modular interface. +Headers imported as legacy header units are treated as non-modular code +in this regard. + +\pnum +When a \tcode{\#include} appears within non-modular code, +if the named header file is known to correspond to a legacy header unit, +the implementation treats the \tcode{\#include} as an import +of the corresponding legacy header unit. +The mechanism for discovering this correspondence +is left implementation-defined; +there are multiple viable strategies here +(such as explicitly building legacy header modules and +providing them as input to downstream compilations, or +introducing accompanying files describing the legacy header structure) +and we wish to encourage exploration of this space. +An implementation is also permitted to not provide any mapping mechanism, +and process each legacy header unit independently. + +\rSec0[vs]{Comparison to prior proposals} + +\rSec1[vs.ts]{Changes to the Modules TS} + +\pnum +This section lists the ways in which valid code under the Modules TS +would become invalid or change meaning in this merged proposal. + +\pnum +A \tcode{module;} introducer is required prior to a global module fragment, +as described in P0713R1 and approved by Evolution. + +\pnum +When an entity is owned by a module and is never exported, +but is referenced by an exported part of the module interface, +the Modules TS would export the semantic properties +associated with the entity at the point of the export. +If multiple such exports give the entity different semantics, +the program is ill-formed: + +\begin{codeblock} +export module M; +struct S; +export S f(); // \tcode{S} incomplete here +struct S {}; +export S g(); // \tcode{S} complete here, error +\end{codeblock} + +Under the Atom proposal, +the semantics of such entities +are instead determined their the properties +at the end of the module interface unit, +and that is the rule used in this merged proposal. +This is similar to the resolution of P0906R0 issue 1, +as discussed and approved by Evolution, +under which the semantic properties at the last such export are used. +The difference can be observed in a module such as: + +\begin{codeblock} +export module M; +struct S; +export S f(); +struct S {}; +\end{codeblock} + +In the P0906R0 approach, +the return type of \tcode{f()} is incomplete +in importers of \tcode{M}, +so \tcode{f()} cannot be called. +In this merged proposal, +the return type of \tcode{f()} is complete +because a definition of \tcode{S} +appears within the interface unit. +\begin{note} +The order in which declarations appear within a module interface +has no bearing on which semantic properties are exported +in this merged proposal. +\end{note} + +The Modules TS ``attendant entities'' rule is removed, +because there are no longer any cases where it could apply. + +\pnum +Entities declared within \tcode{extern "C"} and \tcode{extern "C++"} +within a module are no longer owned by that module. +It is unclear whether this is a change from the intent of +the Modules TS. + +\rSec1[vs.atom]{Changes relative to the Atom proposal} + +\pnum +This section lists the ways in which valid code under the Atom proposal +would become invalid or change meaning in this merged proposal. + +\pnum +When multiple declarations are provided for an entity, +and only some of them are declared \tcode{export}, +only the semantic effects of the exported declarations +are reachable outside the module. +Under the Atom proposal, +\tcode{export} only controls name visibility, +and all semantic effects in the module interface unit +(and in module partitions exported by it) +are exported. +The Atom rule intends to ensure that +reordering declarations cannot affect the exported semantics. +However, applying that change to the Modules TS +would interfere with its goal to always allow modules +to always be defined in a single source file. +The merged rule provides both properties. +The Atom rule is used for entities that are never exported. + +\pnum +The merged proposal supports global module fragments, +which interferes with the Atom proposal's goal +of making the preamble easy to identify and process +with non-compiler tools. +However, the benefits of the Atom approach are still available +to those who choose not to put code in the global module fragment. + +\pnum +Under the Atom proposal, +we considered restricting the preprocessor constructs that may appear +within the preamble. +In this merged proposal, +such restrictions are not in place +as they would harm the ability +to put arbitrary code in the global module fragment, +as required by the Modules TS's legacy header support. + +\pnum +The identifiers \tcode{export} and \tcode{module} are taken as keywords +by the merged proposal, +rather than making them context-sensitive as proposed by the Atom proposal. +This follows EWG's direction on this question from discussion of P0924R0. + +\pnum +The Atom proposal's rule for export of namespace names has not been adopted, +pending further discussion. See \ref{vs.open.namespace}. + +\pnum +The Atom proposal's rule for reachability within templates has not been adopted, +pending further discussion. See \ref{vs.open.templates}. + +\rSec2[vs.atom.extra]{Atom features not merged} + +\pnum +Two features of the Atom proposal were not presented at Jacksonville +due to time constraints. +Because these features have not been discussed in Evolution, +they are not part of the merged wording. They are: + +\begin{itemize} +\item +\tcode{public import} declarations. +These declarations provide a mechanism to re-export +the semantic properties of a module +without re-exporting its introduced names. +\begin{example} +\begin{codeblock} +export module Foo; +public import std.memory; +struct S { int n; }; +export std::unique_ptr get(); +\end{codeblock} + +Here, a user of \tcode{Foo} +can call \tcode{get()} without needing to +import \tcode{std.memory}: + +\begin{codeblock} +import Foo; +int main() { return get()->n; } // ok +\end{codeblock} + +In particular, +the return type of \tcode{get()} is a complete type +in an importer of \tcode{Foo}. +With a regular \tcode{import}, +a user would need to also import \tcode{std.memory} themselves. +With a \tcode{export import}, +the user could accidentally rely on +\tcode{Foo} providing the name +\tcode{std::unique_ptr} (and other names from the same module). +\end{example} + +We still believe there is value in this functionality, +but think it would be preferable to provide +a more general mechanism that permits +per-name export control, perhaps + +\begin{codeblock} +export import some.module{list, of, imported::names}; +\end{codeblock} + +with which \tcode{public import foo;} +can be rewritten as +\tcode{export import foo\{\};}. + +\item +\tcode{\#export} directives. +These preprocessor directives provide a mechanism +to export specific macros from named modules. +We anticipate further discussion on this topic +in the context of P0877R0 and P0955R0. +\end{itemize} + +\rSec1[vs.open]{Open questions} + +\pnum +While performing the merge, we discovered a few issues +in the common subset of the Modules TS and the Atom proposal +for which the two proposals give different answers, +where we did not reach agreement on the superior answer +and would like to solicit EWG input. + +\rSec2[vs.open.namespace]{Namespace export} + +\pnum +Under the Modules TS, +all namespaces +(excluding anonymous namespaces and those nested within them) +that are declared in a module interface unit +have external linkage and +are exported. +Under the Atom proposal, +all such namespace names +still have external linkage, +but are only exported if they are either +explicitly exported, or +if any name within them is exported. +\begin{note} +The Atom proposal permits implementation-detail namespace names +to be hidden from the interface of a module +despite being declared in a module interface unit. +\end{note} + +\pnum +\begin{example} +\begin{codeblock} +export module M; + +export namespace A {} // exported in Atom, TS, and merged proposal +namespace B { // exported in Atom, TS, and merged proposal + export int n; +} +namespace C { // exported in TS and merged proposal, not in Atom + int n; +} +\end{codeblock} +\end{example} + +\rSec2[vs.open.templates]{Reachability in template instantiations} + +\pnum +The Atom proposal provides a concrete rule for +the reachability of declarations +within a template instantiation: + +\hfill\begin{minipage}{\dimexpr\textwidth-1cm} +Within a template instantiation, the \term{path of instantiation} +is a sequence of locations within the program, +starting from the ultimate point of instantiation, +via each intervening template instantiation, +terminating at the instantiation in question. +Names are visible and semantic properties are available +within template instantiations +if they would be visible or available +at any point along the path of instantiation, +or (for points outside the current translation unit) +would be visible or available +at the end of the translation unit +containing the relevant point of instantiation. +\begin{flushright} +--- P0947R1, 7.1 Templates and two-phase name lookup +\end{flushright} +\end{minipage} + +This rule permits a template to make use of all semantic effects +that were available at each point along its path of instantiation, +even if those semantic effects were not exported. + +\pnum +The Modules TS does not specify any rule for which semantic effects +are reachable in a template instantiation. +One might presume that the reachable semantic effects +are either those that are reachable the point of instantiation +or perhaps the union of those and the semantic effects +reachable at the point of definition of the template. +However, neither of these is sufficient to accept +cases involving more than a couple of modules: + +\begin{codeblock} +export module A; +export template void f(T t, U u) { + t.f(); +} +\end{codeblock} + +\begin{codeblock} +export module B; +import A; +export struct S { void f(); }; +export template void g(U u) { S s; f(s, u); } +\end{codeblock} + +\begin{codeblock} +export module C; +import B; +export template void h(U u) { g(u); } +\end{codeblock} + +\begin{codeblock} +import C; +int main() { h(0); } +\end{codeblock} + +Under the Modules TS, this program is presumably ill-formed. +The definition of \tcode{struct S} and +the declaration of its member \tcode{f} +are --- presumably --- not reachable from the instantiation +of \tcode{f}. +\tcode{S} is not even a complete type in the instantiation. +In order to accept this program, we must make available +semantic effects that are reachable from neither +the point of definition of the template nor +the point of instantiation of the template. + +\pnum +Merging the Atom rule into the Modules TS would, however, +violate a goal of the Modules TS: +that the set of needed declarations from the global module fragment +be identifiable when processing the module interface unit, +and be minimal compared to the total size of the included headers. +However, a hybrid rule is possible: +declarations are reachable within a template instantiation if +they are reachable at the (ultimate) point of instantiation, +or if they would be reachable in a module implementation unit +of any module along the path of instantiation +(that is, if they are an exported semantic effect from +the global module fragment of the module interface, or +a semantic effect of a declaration in the module interface, or +a semantic effect imported into the module interface). + +\pnum +The Atom rule also applies to the set of names found by ADL. +For associated types owned by modules, +the Modules TS already extends the set of locations where lookup is performed +to include the owning modules of those types. +However, we still need the extended lookup proposed by Atom +for associated entities that are not owned by modules, +in order to properly find ADL results +for types defined in legacy header units. diff --git a/src/config.tex b/src/config.tex index 1758f65..5bd2873 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,16 +1,16 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{N4720} -\newcommand{\prevdocno}{N4689} +\newcommand{\docno}{PnnnnR0} +\newcommand{\prevdocno}{PnnnnR0} \newcommand{\cppver}{201703L} %% Title -\newcommand{\doctitle}{Extensions to \Cpp for Modules} +\newcommand{\doctitle}{Merging Modules} % \newcommand{\frtitle}{\Cpp Extensions for Networking} %% Release date -%\newcommand{\reldate}{\today} -\newcommand{\reldate}{2018-01-29} +\newcommand{\reldate}{\today} +%\newcommand{\reldate}{2018-01-29} %% Library chapters diff --git a/src/cover-wd.tex b/src/cover-wd.tex index 5a451b4..4f78983 100644 --- a/src/cover-wd.tex +++ b/src/cover-wd.tex @@ -8,7 +8,7 @@ \def\hd{\begin{tabular}{ll} \textbf{Document Number:} & {\larger\docno} \\ \textbf{Date:} & \reldate \\ - \textbf{Revises:} & \prevdocno \\ +% \textbf{Revises:} & \prevdocno \\ \textbf{Reply to:} & Richard Smith \\ & Google \\ & richard@metafoo.co.uk diff --git a/src/macros.tex b/src/macros.tex index 88abf1a..d6f64a2 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -151,6 +151,7 @@ \newcommand{\enterexample}{\EnterBlock{Example}} \newcommand{\exitexample}{\ExitBlock{example}} \newenvironment{example}[1][Example]{\EnterBlock{#1}}{\ExitBlock{example}} +\newenvironment{note}[1][Note]{\enternote}{\exitnote} %% Library function descriptions \newcommand{\Fundescx}[1]{\textit{#1}\xspace} @@ -168,7 +169,7 @@ \newcommand{\complexity}{\Fundesc{Complexity}} \newcommand{\remark}{\Fundesc{Remark}} \newcommand{\remarks}{\Fundesc{Remarks}} -\newcommand{\note}{\remark} +%\newcommand{\note}{\remark} \newcommand{\notes}{\remarks} \newcommand{\realnote}{\Fundesc{Note}} \newcommand{\realnotes}{\Fundesc{Notes}} From 69414c243d6a44132a7913ce72f3be1e7c1552dc Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 4 Jun 2018 21:01:29 +0200 Subject: [PATCH 10/77] Updates after discussion with GDR. --- src/bg.tex | 330 ++++++++++++++++++++++++++----------------------- src/config.tex | 2 +- src/ts.tex | 4 + 3 files changed, 181 insertions(+), 155 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index 4912392..3b77fa9 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -66,14 +66,6 @@ This is the \term{primary module interface unit} for \tcode{foo}~(\ref{merged.part}). -\pnum -Imports control which namespace-scope names are visible to name lookup, -and which namespace-scope declarations are reachable semantically. -The behavior of an entity is determined by -the set of declarations of that entity. -For example, class members and enumeration members are visible to name lookup -if there is a reachable definition of the class or enumeration. - \pnum A declaration can be exported by use of the \tcode{export} keyword: \begin{codeblock} @@ -82,18 +74,40 @@ void f(); } \end{codeblock} +Imports control which namespace-scope names are visible to name lookup. Names introduced by exported declarations are visible to name lookup outside the module, in contexts that import that module. Names introduced by non-exported declarations are not. -Likewise, exported declarations are reachable outside the module, -in contexts that import that module. -If an entity with no exported declarations -is used in the interface of an exported declaration, + +\pnum +The behavior of an entity is determined by +the set of reachable declarations of that entity. +Entities introduced after the preamble in a module unit +are owned by that module; +when such an entity is used outside that module, +its reachable declarations are those +that are part of the interface of the module. +In particular, a class, function, template, etc. +that is owned by a module +always has the same semantics +when viewed from outside the module. +Within a module unit of the owning module, +the semantic properties accumulate throughout the file. +Class members and enumeration members are visible to name lookup +if there is a reachable definition of the class or enumeration. + +\pnum +Exported declarations are reachable outside the module. +When an entity is exported, +it must be exported on its first declaration, +and all exported declarations of that entity +are required to precede any non-exported declaration. +If an entity has no exported declarations all declarations of that entity within the interface of the module -are reachable. - +are considered reachable. + \pnum Declarations in the module interface (excluding those with internal linkage) are visible and reachable in implementation units of the same module, @@ -199,12 +213,19 @@ // ... use declarations and macros from some-header.h ... \end{codeblock} +\pnum +Only \tcode{\#include}{s} are permitted to appear +in the global module fragment, +but there are no special restrictions +on the contents of the \tcode{\#include}{d} file. + \pnum Declarations from code in the global module fragment are not owned by the module, -and are not re-exported by default. -Instead, such declarations are exported if they are referred to -by an exported declaration (transitively). +and are not reachable from outside the module by default. +Instead, such declarations become reachable if they are referred to +by an exported declaration +(or transitively if they are referred to by another reachable declaration). Two important special cases are that an \tcode{export using} declaration exports both the nominated name and all reachable declarations of that name, @@ -291,6 +312,63 @@ An implementation is also permitted to not provide any mapping mechanism, and process each legacy header unit independently. +\rSec1[merged.temp]{Templates} + +\pnum +Template instantiations are notionally performed in ``instantiation units'', +not within translation units that might contain imports. +We must therefore specify +which names are visible and +which declarations are reachable +in these instantiation units. + +\pnum +The rules follow from a simple principle: +when code at some point $X$ triggers a template instantiation, +that instantiation should be able to reach (at least) +the declarations that were reachable at $X$. +Therefore, within a template instantiation, +a declaration is reachable if +it was reachable at one of the points where +an enclosing instantiation was triggered. +If that point is in the translation unit +containing the point of instantiation, +this includes all declarations reachable +at that point; +if the point is in an intervening instantiation +in a module interface, +only declarations that would be reachable +to an importer of that module +or that are visible through an import of that module +are reachable. +\begin{note} +This only matters for entities that are +not owned by a named module: +for entities owned by a named module, +a superset of the above properties +are always reachable outside the owning module. +\end{note} + +\pnum +In addition to semantic properties of entities, +we must determine which names are found by +argument-dependent name lookup. +For that purpose, +we follow the Modules TS rule +(subject to ongoing work on P0923) +for associated entities owned by a named module +and make functions visible +if they are declared in that module, +in the same namespace as the associated entity. +For associated entities not owned by a named module, +functions are visible to +argument-dependent name lookup +if they are declared +in the same namespace as the associated entity, +and are visible at a point where +an enclosing instantiation +was triggered. + \rSec0[vs]{Comparison to prior proposals} \rSec1[vs.ts]{Changes to the Modules TS} @@ -359,6 +437,11 @@ It is unclear whether this is a change from the intent of the Modules TS. +\pnum +The global module fragment can only +directly contain \tcode{\#include} directives, +not arbitrary code. + \rSec1[vs.atom]{Changes relative to the Atom proposal} \pnum @@ -396,8 +479,11 @@ we considered restricting the preprocessor constructs that may appear within the preamble. In this merged proposal, -such restrictions are not in place -as they would harm the ability +the global module fragment is restricted +to only containing \tcode{\#include} directives, +but there are no restrictions on the contents +of the included file +as such restrictions would harm the ability to put arbitrary code in the global module fragment, as required by the Modules TS's legacy header support. @@ -412,8 +498,10 @@ pending further discussion. See \ref{vs.open.namespace}. \pnum -The Atom proposal's rule for reachability within templates has not been adopted, -pending further discussion. See \ref{vs.open.templates}. +The Atom rule for declaration reachability +has been relaxed to allow declarations owned by modules +to be considered reachable even if the owning module +is not reachable through a path of imports. \rSec2[vs.atom.extra]{Atom features not merged} @@ -429,46 +517,10 @@ These declarations provide a mechanism to re-export the semantic properties of a module without re-exporting its introduced names. -\begin{example} -\begin{codeblock} -export module Foo; -public import std.memory; -struct S { int n; }; -export std::unique_ptr get(); -\end{codeblock} - -Here, a user of \tcode{Foo} -can call \tcode{get()} without needing to -import \tcode{std.memory}: - -\begin{codeblock} -import Foo; -int main() { return get()->n; } // ok -\end{codeblock} - -In particular, -the return type of \tcode{get()} is a complete type -in an importer of \tcode{Foo}. -With a regular \tcode{import}, -a user would need to also import \tcode{std.memory} themselves. -With a \tcode{export import}, -the user could accidentally rely on -\tcode{Foo} providing the name -\tcode{std::unique_ptr} (and other names from the same module). -\end{example} - -We still believe there is value in this functionality, -but think it would be preferable to provide -a more general mechanism that permits -per-name export control, perhaps - -\begin{codeblock} -export import some.module{list, of, imported::names}; -\end{codeblock} - -with which \tcode{public import foo;} -can be rewritten as -\tcode{export import foo\{\};}. +Such functionality is rendered mostly unnecessary +by the more liberal reachability rule +used for entities owned by modules +in the merged proposal. \item \tcode{\#export} directives. @@ -481,10 +533,8 @@ \rSec1[vs.open]{Open questions} \pnum -While performing the merge, we discovered a few issues -in the common subset of the Modules TS and the Atom proposal -for which the two proposals give different answers, -where we did not reach agreement on the superior answer +While performing the merge, we encountered a few issues +for which we did not reach an agreement on the superior answer and would like to solicit EWG input. \rSec2[vs.open.namespace]{Namespace export} @@ -523,104 +573,76 @@ \end{codeblock} \end{example} -\rSec2[vs.open.templates]{Reachability in template instantiations} - -\pnum -The Atom proposal provides a concrete rule for -the reachability of declarations -within a template instantiation: - -\hfill\begin{minipage}{\dimexpr\textwidth-1cm} -Within a template instantiation, the \term{path of instantiation} -is a sequence of locations within the program, -starting from the ultimate point of instantiation, -via each intervening template instantiation, -terminating at the instantiation in question. -Names are visible and semantic properties are available -within template instantiations -if they would be visible or available -at any point along the path of instantiation, -or (for points outside the current translation unit) -would be visible or available -at the end of the translation unit -containing the relevant point of instantiation. -\begin{flushright} ---- P0947R1, 7.1 Templates and two-phase name lookup -\end{flushright} -\end{minipage} - -This rule permits a template to make use of all semantic effects -that were available at each point along its path of instantiation, -even if those semantic effects were not exported. - -\pnum -The Modules TS does not specify any rule for which semantic effects -are reachable in a template instantiation. -One might presume that the reachable semantic effects -are either those that are reachable the point of instantiation -or perhaps the union of those and the semantic effects -reachable at the point of definition of the template. -However, neither of these is sufficient to accept -cases involving more than a couple of modules: +\rSec2[vs.open.import.lex]{Lexing after \tcode{import}} + +\pnum +The Atom proposal introduces a change in the \Cpp{} lexing rules. +After the \tcode{import} token, +the preprocessor attempts to form a \term{header-name} +token where possible. +This permits usage of normal header names: \begin{codeblock} -export module A; -export template void f(T t, U u) { - t.f(); -} +import ; // forms \tcode{} header-name token +import "bar\baz.h"; // forms \tcode{"bar\\baz.h"} header-name token \end{codeblock} +\pnum +It has been suggested that we instead require use of +raw string literals for header names with escape sequences: + \begin{codeblock} -export module B; -import A; -export struct S { void f(); }; -export template void g(U u) { S s; f(s, u); } +import R; // forms \tcode{R} token +import R"bar\baz.h"; // forms \tcode{R"bar\\baz.h"} token \end{codeblock} +This avoids the need for a context-sensitive lexing rule, +but introduces a new form of raw angled string literal, +and has a \term{header-name} syntax distinct from +that used by a \tcode{\#include}. + +\rSec2[vs.open.nonexport]{Syntax for non-exported declarations} + +\pnum +Following the Modules TS, +the syntax for making a subset +of the semantic properties of an entity reachable +is to omit the \tcode{export} keyword +from some redeclarations: + \begin{codeblock} -export module C; -import B; -export template void h(U u) { g(u); } +export module M; +export struct S; +// ... +struct S { ... }; \end{codeblock} +\pnum +This is not completely satisfying: +\begin{itemize} +\item the simplest syntax is reserved for a case that is +relatively rare in many code bases, and definitions may +fail to be exported by accident +\item the fact that the definition of \tcode{S} is not exported +is an important semantic property of the code, +but the code lacks a way to express that semantic property +\item unlike other specifiers affecting the linkage +of an entity, \tcode{export} is not inherited by redeclarations +\item this behavior does not extend to entities where +no declaration is exported +\end{itemize} + +As an alternative, an explicit syntax could be used +to specify that a declaration is excluded from the module interface +despite being in the module interface unit. +As a possible syntax: + \begin{codeblock} -import C; -int main() { h(0); } +export module M; +export struct S; +export struct T; +// ... +struct S { ... }; // definition exported +export(false) struct T { ... }; // definition not exported, + // despite \tcode{T} being exported \end{codeblock} - -Under the Modules TS, this program is presumably ill-formed. -The definition of \tcode{struct S} and -the declaration of its member \tcode{f} -are --- presumably --- not reachable from the instantiation -of \tcode{f}. -\tcode{S} is not even a complete type in the instantiation. -In order to accept this program, we must make available -semantic effects that are reachable from neither -the point of definition of the template nor -the point of instantiation of the template. - -\pnum -Merging the Atom rule into the Modules TS would, however, -violate a goal of the Modules TS: -that the set of needed declarations from the global module fragment -be identifiable when processing the module interface unit, -and be minimal compared to the total size of the included headers. -However, a hybrid rule is possible: -declarations are reachable within a template instantiation if -they are reachable at the (ultimate) point of instantiation, -or if they would be reachable in a module implementation unit -of any module along the path of instantiation -(that is, if they are an exported semantic effect from -the global module fragment of the module interface, or -a semantic effect of a declaration in the module interface, or -a semantic effect imported into the module interface). - -\pnum -The Atom rule also applies to the set of names found by ADL. -For associated types owned by modules, -the Modules TS already extends the set of locations where lookup is performed -to include the owning modules of those types. -However, we still need the extended lookup proposed by Atom -for associated entities that are not owned by modules, -in order to properly find ADL results -for types defined in legacy header units. diff --git a/src/config.tex b/src/config.tex index 5bd2873..ae48649 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,7 +1,7 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{PnnnnR0} +\newcommand{\docno}{D1103R0} \newcommand{\prevdocno}{PnnnnR0} \newcommand{\cppver}{201703L} diff --git a/src/ts.tex b/src/ts.tex index 4cc0c67..03580fb 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -127,6 +127,10 @@ %%-------------------------------------------------- %% part 2: wording \part[Wording]{Wording for merging Atom into the Modules TS}\label{wording} +\begin{note} +The wording given here is known to be incomplete, +and not up to date with the design. +\end{note} \include{scope} \include{references} From 837f3aa54b7ab3c114d6c1239e6e9dbed7204afa Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 4 Jun 2018 21:32:10 +0200 Subject: [PATCH 11/77] Added example. --- src/bg.tex | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/bg.tex b/src/bg.tex index 3b77fa9..4dc00eb 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -349,6 +349,44 @@ are always reachable outside the owning module. \end{note} +\pnum +\begin{example} +\begin{codeblock} +export module A; +// instantiation of this template... +export template auto f(T t, T t) { + return t * t; +} +\end{codeblock} + +\begin{codeblock} +export module B; +import B; +import "my_complex.h"; +// ... finds declarations that are reachable here ... +export template auto g(T t) { + my_complex v(1, t); + return f(v, v); +} +\end{codeblock} + +\begin{codeblock} +module C; +import B; +import "my_rational.h"; +// ... and those that are reachable here +void use() { + g(1); +} +\end{codeblock} + +\tcode{my_complex} and \tcode{my_rational} are complete +types within the template instantiation, +even though +\tcode{my_complex} is not a complete type +in either module \tcode{A} or module \tcode{C}. +\end{example} + \pnum In addition to semantic properties of entities, we must determine which names are found by @@ -368,6 +406,14 @@ and are visible at a point where an enclosing instantiation was triggered. +\begin{example} +In the previous example, +\tcode{operator*} can be found by +argument-dependent name lookup +in the legacy header modules for +\tcode{"my_complex.h"} and +\tcode{"my_rational.h"}. +\end{example} \rSec0[vs]{Comparison to prior proposals} From aaa6abc0ffe72c6921f46e798b38ce0ad995538a Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 5 Jun 2018 13:54:33 +0200 Subject: [PATCH 12/77] Fix up some errors and typos. --- src/bg.tex | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index 4dc00eb..a8ed097 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -102,7 +102,8 @@ When an entity is exported, it must be exported on its first declaration, and all exported declarations of that entity -are required to precede any non-exported declaration. +are required to precede any non-exported declaration +of that entity. If an entity has no exported declarations all declarations of that entity within the interface of the module @@ -218,6 +219,9 @@ in the global module fragment, but there are no special restrictions on the contents of the \tcode{\#include}{d} file. +%% FIXME: We do want some restrictions here. +%% No module-declaration in included file, for instance. +%% No macro expansion in preamble after the #includes? \pnum Declarations from code in the global module fragment @@ -280,8 +284,7 @@ Only the legacy header import syntax can import macros. \pnum -Just like declarations within a named module, -declarations within a legacy header unit +Declarations within a legacy header unit are reachable only if the legacy header unit is imported. (There is no special rule for declarations that are referred to by an exported declaration.) @@ -361,7 +364,7 @@ \begin{codeblock} export module B; -import B; +import A; import "my_complex.h"; // ... finds declarations that are reachable here ... export template auto g(T t) { @@ -480,8 +483,10 @@ \pnum Entities declared within \tcode{extern "C"} and \tcode{extern "C++"} within a module are no longer owned by that module. -It is unclear whether this is a change from the intent of -the Modules TS. +In the Modules TS, such declarations would be considered attached +to the module in whose purview they appear, +which means they can only be exported by one module +(although they can still be redeclared in multiple modules). \pnum The global module fragment can only @@ -534,7 +539,7 @@ as required by the Modules TS's legacy header support. \pnum -The identifiers \tcode{export} and \tcode{module} are taken as keywords +The identifiers \tcode{import} and \tcode{module} are taken as keywords by the merged proposal, rather than making them context-sensitive as proposed by the Atom proposal. This follows EWG's direction on this question from discussion of P0924R0. @@ -630,7 +635,7 @@ \begin{codeblock} import ; // forms \tcode{} header-name token -import "bar\baz.h"; // forms \tcode{"bar\\baz.h"} header-name token +import "bar\baz.h"; // forms \tcode{"bar\textbackslash{}baz.h"} header-name token \end{codeblock} \pnum @@ -639,7 +644,7 @@ \begin{codeblock} import R; // forms \tcode{R} token -import R"bar\baz.h"; // forms \tcode{R"bar\\baz.h"} token +import R"bar\baz.h"; // forms \tcode{R"bar\textbackslash{}baz.h"} token \end{codeblock} This avoids the need for a context-sensitive lexing rule, @@ -689,6 +694,6 @@ export struct T; // ... struct S { ... }; // definition exported -export(false) struct T { ... }; // definition not exported, +noexport struct T { ... }; // definition not exported, // despite \tcode{T} being exported \end{codeblock} From 72b73b1397c844ed5e901c1824493638378e628c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 5 Jun 2018 15:58:23 +0200 Subject: [PATCH 13/77] Fix another typo. --- src/bg.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index a8ed097..8f5268f 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -357,8 +357,8 @@ \begin{codeblock} export module A; // instantiation of this template... -export template auto f(T t, T t) { - return t * t; +export template auto f(T t, T u) { + return t * u; } \end{codeblock} From 83baa1f96e239bde9fc22aba01242199e3d0f1ee Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 22 Jun 2018 10:44:23 -0700 Subject: [PATCH 14/77] Extend example. --- src/bg.tex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/bg.tex b/src/bg.tex index 8f5268f..bbc1ca9 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -692,8 +692,14 @@ export module M; export struct S; export struct T; +struct U; +struct V; // ... struct S { ... }; // definition exported noexport struct T { ... }; // definition not exported, // despite \tcode{T} being exported +struct U { ... }; +noexport struct V { ... }; +export U *u(); // \tcode{*u()} has complete type in importers +export V *v(); // \tcode{*v()} has incomplete type in importers \end{codeblock} From 8212c3603a8d0b26a14a19f20d6f6d46b8fc4bca Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 20 Sep 2018 13:44:03 -0700 Subject: [PATCH 15/77] Remove proclaimed-ownership-declarations. --- src/basic.tex | 4 ++-- src/declarations.tex | 19 ++++++++++--------- src/templates.tex | 5 +++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 95413f2..a1d19ca 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -71,7 +71,7 @@ is not definition\removed{.}\added{,} \color{addclr} \item \added{it is a \grammarterm{module-import-declaration},} - \item \added{it is a \grammarterm{proclaimed-ownership-declaration}.} + \item \begin{before}\added{it is a \grammarterm{proclaimed-ownership-declaration}.}\end{before} \end{itemize} \color{addclr} % \begin{example} @@ -535,7 +535,7 @@ the declaration of the name is attached to a named module, is not exported (\ref{dcl.module.interface}), and is not declared in a - \grammarterm{proclaimed-ownership-declaration} or a + %\grammarterm{proclaimed-ownership-declaration} or a \grammarterm{linkage-specification}, the name has module linkage;} \item \added{otherwise, the name has external linkage}. diff --git a/src/declarations.tex b/src/declarations.tex index e1918cb..41e0293 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -23,8 +23,8 @@ attribute-declaration\br \color{addclr} \added{export-declaration\br - module-import-declaration\br - proclaimed-ownership-declaration} + module-import-declaration}\br + \begin{before}\added{proclaimed-ownership-declaration}\end{before} \end{bnf} \end{std.txt} @@ -344,10 +344,10 @@ \grammarterm{namespace-declaration} with external linkage, it is attached to the global module. - \item Otherwise, if the declaration is - within a \grammarterm{proclaimed-ownership-declaration}, it - is attached to the module nominated by the - \grammarterm{proclaimed-ownership-declaration}. +% \item Otherwise, if the declaration is +% within a \grammarterm{proclaimed-ownership-declaration}, it +% is attached to the module nominated by the +% \grammarterm{proclaimed-ownership-declaration}. \item Otherwise, if the declaration is within a \grammarterm{linkage-specification}, it @@ -512,7 +512,7 @@ \grammarterm{declaration} shall not contain \tcode{static}. The \grammarterm{declaration} shall not be an \grammarterm{unnamed-namespace-definition} - or a \grammarterm{proclaimed-ownership-declaration}. + \begin{before}\color{addclr}or a \grammarterm{proclaimed-ownership-declaration}\end{before}. \begin{example} \begin{before}\color{addclr} \begin{codeblock} @@ -744,7 +744,7 @@ \alinea A \grammarterm{module-import-declaration} shall appear only at global scope, and not in a \grammarterm{linkage-specification} - or \grammarterm{proclaimed-ownership-declaration}. + \begin{before}\color{addclr}or \grammarterm{proclaimed-ownership-declaration}\end{before}. \begin{after}\color{addclr} In a module unit, a \grammarterm{module-import-declaration} shall appear only within the \grammarterm{preamble}. @@ -989,7 +989,7 @@ lead it to be considered to nominate yet additional modules. \end{std.txt} - +\begin{before} \rSec2[dcl.module.proclaim]{Proclaimed ownership declaration}% \begin{std.txt}\color{addclr} @@ -1051,6 +1051,7 @@ \grammarterm{proclaimed-ownership-declaration} does not export the entities introduced by the declaration. \end{std.txt} +\end{before} \rSec2[dcl.module.reach]{Reachability} diff --git a/src/templates.tex b/src/templates.tex index facca9d..c3e841b 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -11,8 +11,9 @@ A \grammarterm{template-declaration} can appear only as a namespace scope or class scope declaration. \added{Its \grammarterm{declaration} shall not be an - \grammarterm{export-declaration} or a - \grammarterm{proclaimed-ownership-declaration}.} + \grammarterm{export-declaration}} + \begin{before}\added{or a \grammarterm{proclaimed-ownership-declaration}}\end{before} + \added{.} In a function template declaration, the last component of the \grammarterm{declarator-id} shall not be a \grammarterm{template-id}. \end{std.txt} From 66ccb1679de25fbae4529fa490b43f1364e161b3 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 2 Oct 2018 16:00:08 -0700 Subject: [PATCH 16/77] Update cover for R1. --- src/config.tex | 11 ++++------- src/cover-wd.tex | 7 +++---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/config.tex b/src/config.tex index ae48649..c2339a7 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,16 +1,13 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{D1103R0} -\newcommand{\prevdocno}{PnnnnR0} -\newcommand{\cppver}{201703L} +\newcommand{\docno}{D1103R1} +\newcommand{\prevdocno}{P1103R0} +%\newcommand{\cppver}{201703L} %% Title -\newcommand{\doctitle}{Merging Modules} -% \newcommand{\frtitle}{\Cpp Extensions for Networking} +\newcommand{\doctitle}{Modules Wording} %% Release date \newcommand{\reldate}{\today} %\newcommand{\reldate}{2018-01-29} - -%% Library chapters diff --git a/src/cover-wd.tex b/src/cover-wd.tex index 4f78983..c4d0607 100644 --- a/src/cover-wd.tex +++ b/src/cover-wd.tex @@ -9,9 +9,8 @@ \textbf{Document Number:} & {\larger\docno} \\ \textbf{Date:} & \reldate \\ % \textbf{Revises:} & \prevdocno \\ - \textbf{Reply to:} & Richard Smith \\ - & Google \\ - & richard@metafoo.co.uk + \textbf{Reply to:} & Richard Smith \smaller Google \\ + & \smaller richard@metafoo.co.uk \\ \end{tabular} } \newlength{\hdwidth} @@ -21,5 +20,5 @@ \begin{center} \textbf{\Huge -Merging Modules} +Modules Wording} \end{center} From a6a3b1bfce54f9f4e45c58a8c30af17d07b2f2e4 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 2 Oct 2018 18:30:02 -0700 Subject: [PATCH 17/77] Update with descriptions of Rapperswil and Bellevue changes. --- src/bg.tex | 610 ++++++++++++++++++----------------------------- src/config.tex | 2 +- src/cover-wd.tex | 2 +- 3 files changed, 240 insertions(+), 374 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index bbc1ca9..6e10528 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -14,9 +14,18 @@ \end{itemize} Both options passed, but the first option had stronger support. -This paper describes our effort in merging the two proposals -and the remaining outstanding questions from the merge, -and provides wording for the resulting merged specification. + +At Rapperswill 2018, we presented P1103R0, representing +our effort in merging the two proposals +and the remaining outstanding questions from the merge. +Many open questions were answered, and we voted to adopt the +merged proposal into the Modules TS, and +scheduled a 2-day ad-hoc meeting to discuss the remaining +open questions. + +At the Bellevue 2018 ad-hoc Modules meeting, we answered all +remaining known open design questions. This paper provides a +description and wording for the resulting design. \rSec1[bg.conventions]{Stylistic conventions} @@ -47,7 +56,11 @@ \rSec1[merged.basic]{Basics} \pnum -A \term{module unit} begins with a preamble, +A \term{module unit} is a translation unit that forms part of a module. +Such a translation unit begins with% +\footnote{A global module fragment (\ref{merged.legacy.frag}) may optionally +precede the preamble.} +a preamble, comprising a module declaration and a sequence of imports: @@ -58,61 +71,59 @@ // ... more imports ... \end{codeblock} -Within a module unit, imports may only appear within the preamble. +Within a module unit, imports may not appear after the end of the preamble. The \tcode{export} keyword indicates that a module unit is a \term{module interface unit}, which defines the interface for the module. For a module \tcode{foo}, there must be exactly one translation unit whose preamble contains \tcode{export module foo;}. This is the \term{primary module interface unit} for \tcode{foo}~(\ref{merged.part}). +(All other module interface units are module interface partitions; +see \ref{merged.part}.) \pnum -A declaration can be exported by use of the \tcode{export} keyword: +Two related but distinct notions are key to understanding module semantics: +\begin{itemize} +\item A declaration is \term{visible} in a context if it can be found by a +suitable name lookup. +\item A declaration is \term{reachable} in a context if its semantic effects +are available for use. (For example, a class type is complete in contexts +where a definition of the class is reachable.) +\end{itemize} +A declaration is reachable wherever it is visible, but the converse is not true +in general. +Imports control which namespace-scope names are visible to name lookup, +and which declarations are reachable semantically. +The behavior of an entity is determined by +the set of reachable declarations of that entity. +For example, class members and enumeration members are visible to name lookup +if there is a reachable definition of the class or enumeration. + +\pnum +A declaration can be exported by use of the \tcode{export} keyword +in a module interface unit: \begin{codeblock} export int a; export { void f(); } \end{codeblock} -Imports control which namespace-scope names are visible to name lookup. -Names introduced by exported declarations -are visible to name lookup outside the module, -in contexts that import that module. -Names introduced by non-exported declarations are not. - -\pnum -The behavior of an entity is determined by -the set of reachable declarations of that entity. -Entities introduced after the preamble in a module unit -are owned by that module; -when such an entity is used outside that module, -its reachable declarations are those -that are part of the interface of the module. -In particular, a class, function, template, etc. -that is owned by a module -always has the same semantics -when viewed from outside the module. -Within a module unit of the owning module, -the semantic properties accumulate throughout the file. -Class members and enumeration members are visible to name lookup -if there is a reachable definition of the class or enumeration. - -\pnum -Exported declarations are reachable outside the module. -When an entity is exported, -it must be exported on its first declaration, -and all exported declarations of that entity -are required to precede any non-exported declaration -of that entity. -If an entity has no exported declarations -all declarations of that entity -within the interface of the module -are considered reachable. - -\pnum -Declarations in the module interface (excluding those with internal linkage) -are visible and reachable in implementation units of the same module, -regardless of whether they are exported. +Exported declarations in a module interface unit +are visible to name lookup +in contexts that import that module interface unit. +Non-exported declarations (excluding those with internal linkage) +in a module unit +are visible to name lookup +in contexts within the same module that import the module unit. +All declarations in transitively-imported module units +are reachable, whether or not they are exported. + +\pnum +If a declaration within a namespace is exported, +the enclosing namespace is also implicitly exported +(but other declarations in the namespace are not implicitly exported). +If a namespace is explicitly exported, +all declarations within that namespace definition are exported. \rSec1[merged.part]{Module partitions} @@ -134,7 +145,7 @@ \end{codeblock} \pnum -Module partitions behave logically like distinct modules, +Module interface partitions behave logically like distinct modules, except that they share ownership of contained entities with the module that they form part of. This allows an entity to be declared in one partition @@ -215,37 +226,39 @@ \end{codeblock} \pnum -Only \tcode{\#include}{s} are permitted to appear -in the global module fragment, -but there are no special restrictions -on the contents of the \tcode{\#include}{d} file. -%% FIXME: We do want some restrictions here. -%% No module-declaration in included file, for instance. -%% No macro expansion in preamble after the #includes? +Prior to preprocessing, only preprocessor directives can appear +in the global module fragment, but those directives can include +\tcode{\#include} directives that expand to declarations, as usual. +Declarations in the global module fragment +are not owned by the module. \pnum -Declarations from code in the global module fragment -are not owned by the module, -and are not reachable from outside the module by default. -Instead, such declarations become reachable if they are referred to -by an exported declaration -(or transitively if they are referred to by another reachable declaration). -Two important special cases are that an \tcode{export using} -declaration exports both the nominated name and -all reachable declarations of that name, -and an exported function declaration exports -all reachable declarations of its return type: +In order to avoid bloating the interface of a module with declarations +included into its global module fragment, declarations in the global +module fragment that are not (transitively) referenced by the module unit are +discarded. +In particular, such declarations are not reachable from other translation +units that import the module unit, and cannot be found by the second phase +of two-phase name lookup for a template instantiation whose point of +instantiation is outside the module unit. +A declaration in a global module fragment is considered to be referenced if it +is named within the module unit (after the preamble), or if it is mentioned +by a referenced declaration. +\pnum +\begin{example} \begin{codeblock} module; -#include "some-header.h" // defines class \tcode{X} and \tcode{Y} +#include "some-header.h" // defines classes \tcode{X}, \tcode{Y}, \tcode{Z} export module foo; -export using X = ::X; // export name \tcode{X}; export all declarations +export using X = ::X; // export name \tcode{X}; retain all declarations // of \tcode{X} from \tcode{"some-header.h"} -export Y f(); // export name \tcode{f}; export all declarations +export Y f(); // export name \tcode{f}; retain all declarations // of \tcode{Y} from \tcode{"some-header.h"} +// \tcode{Z} is not mentioned, so is discarded \end{codeblock} +\end{example} \rSec2[merged.legacy.import]{Legacy header units} @@ -257,7 +270,8 @@ \begin{codeblock} export module foo; import "some-header.h"; -// ... use declarations and macros from some-header.h ... +import ; +// ... use declarations and macros from some-header.h and ... \end{codeblock} \pnum @@ -283,11 +297,19 @@ macros are not exported. Only the legacy header import syntax can import macros. +\rSec2[merged.legacy.reachability]{Reachability of legacy declarations} + \pnum -Declarations within a legacy header unit -are reachable only if the legacy header unit is imported. -(There is no special rule for declarations -that are referred to by an exported declaration.) +A declaration in a global module fragment or legacy header unit +is reachable if it is visible. +It is unspecified whether such a declaration is also reachable +in contexts where it is not visible but is transitively +imported. +(Ideally, such a declaration would not be considered reachable +in such contexts. However, in practice, making transitively-imported +declarations unreachable would impose a severe implementation +cost for some implementations, so we leave the extent to which +this rule is enforced up to the implementation.) \rSec2[merged.nonmodular.use]{Module use from non-modular code} @@ -297,8 +319,9 @@ This permits ``bottom-up'' modularization, whereby a library switches to providing only a modular interface and defining its header interface in terms of the modular interface. -Headers imported as legacy header units are treated as non-modular code -in this regard. +Non-modular code includes translation units other than module units, +headers imported as legacy header units, and the global module fragment +of a module unit. \pnum When a \tcode{\#include} appears within non-modular code, @@ -315,110 +338,163 @@ An implementation is also permitted to not provide any mapping mechanism, and process each legacy header unit independently. -\rSec1[merged.temp]{Templates} - -\pnum -Template instantiations are notionally performed in ``instantiation units'', -not within translation units that might contain imports. -We must therefore specify -which names are visible and -which declarations are reachable -in these instantiation units. - -\pnum -The rules follow from a simple principle: -when code at some point $X$ triggers a template instantiation, -that instantiation should be able to reach (at least) -the declarations that were reachable at $X$. -Therefore, within a template instantiation, -a declaration is reachable if -it was reachable at one of the points where -an enclosing instantiation was triggered. -If that point is in the translation unit -containing the point of instantiation, -this includes all declarations reachable -at that point; -if the point is in an intervening instantiation -in a module interface, -only declarations that would be reachable -to an importer of that module -or that are visible through an import of that module -are reachable. +\rSec0[vs]{Comparison to prior proposals} + +\rSec1[vs.r0]{Changes since R0} + +\pnum +This section lists changes to the design of the merged modules proposal +since P1103R0. + +\rSec2[vs.r0.namespace]{Namespace export} + +\pnum +In P1103R0 and in the Modules TS, +all namespaces +(excluding anonymous namespaces and those nested within them) +that are declared in a module interface unit +have external linkage and +are exported. +Following strong EWG direction in Rapperswil, +in this document such namespace names +are only exported if they are either +explicitly exported, or +if any name within them is exported. \begin{note} -This only matters for entities that are -not owned by a named module: -for entities owned by a named module, -a superset of the above properties -are always reachable outside the owning module. +The new approach permits implementation-detail namespace names +to be hidden from the interface of a module +despite being declared in a module interface unit. \end{note} +\begin{example} +\begin{codeblock} +export module M; + +export namespace A {} // exported +namespace B { // exported + export int n; +} +namespace C { // not exported in this proposal, exported in TS / P1103R0 + int n; +} +\end{codeblock} +\end{example} + +\rSec2[vs.r0.templates]{Reachability in template instantiations} + +\pnum +Following discussion and direction from Bellevue, +we use a path of instantiation rule to guide +visibility and reachability of declarations +within a template instantiation, based on +the relevant rule from the Atom proposal: + +\hfill\begin{minipage}{\dimexpr\textwidth-1cm} +Within a template instantiation, the \term{path of instantiation} +is a sequence of locations within the program, +starting from the ultimate point of instantiation, +via each intervening template instantiation, +terminating at the instantiation in question. +Names are visible and semantic properties are available +within template instantiations +if they would be visible or available +at any point along the path of instantiation, +or (for points outside the current translation unit) +would be visible or available +at the end of the translation unit +containing the relevant point of instantiation. +\begin{flushright} +--- P0947R1, 7.1 Templates and two-phase name lookup +\end{flushright} +\end{minipage} + +This rule permits a template to make use of all declarations +that were visible or reachable at each point along its path of instantiation, +even if those declarations are not visible or reachable +in the template definition context nor the template instantiation context. \pnum \begin{example} \begin{codeblock} export module A; -// instantiation of this template... -export template auto f(T t, T u) { - return t * u; +export template void f(T t, U u) { + t.f(); } \end{codeblock} \begin{codeblock} +module; +struct S { void f(); }; export module B; import A; -import "my_complex.h"; -// ... finds declarations that are reachable here ... -export template auto g(T t) { - my_complex v(1, t); - return f(v, v); -} +export template void g(U u) { S s; f(s, u); } \end{codeblock} \begin{codeblock} -module C; +export module C; import B; -import "my_rational.h"; -// ... and those that are reachable here -void use() { - g(1); -} +export template void h(const U &u) { g(u); } +\end{codeblock} + +\begin{codeblock} +import C; +int main() { h(0); } \end{codeblock} -\tcode{my_complex} and \tcode{my_rational} are complete -types within the template instantiation, -even though -\tcode{my_complex} is not a complete type -in either module \tcode{A} or module \tcode{C}. +The definition of \tcode{struct S} and +the declaration of its member \tcode{f} +are not reachable from the point of instantiation +of \tcode{f}, nor from the template definition. +But this code is valid under this proposal, because +\tcode{S} is reachable from module \tcode{B}, which +is on the path of instantiation. \end{example} \pnum -In addition to semantic properties of entities, -we must determine which names are found by -argument-dependent name lookup. -For that purpose, -we follow the Modules TS rule -(subject to ongoing work on P0923) -for associated entities owned by a named module -and make functions visible -if they are declared in that module, -in the same namespace as the associated entity. -For associated entities not owned by a named module, -functions are visible to -argument-dependent name lookup -if they are declared -in the same namespace as the associated entity, -and are visible at a point where -an enclosing instantiation -was triggered. +As described above (\ref{merged.legacy.reachability}), +implementations are permitted to treat additional declarations +as reachable even if they would not be reachable on the +path of instantiation, +if they are transitively imported at the +point of instantiation. \begin{example} -In the previous example, -\tcode{operator*} can be found by -argument-dependent name lookup -in the legacy header modules for -\tcode{"my_complex.h"} and -\tcode{"my_rational.h"}. +\begin{codeblock} +module M; +struct S; +import C; +// unspecified whether a definition of \tcode{S} is reachable +// here or in the instantiation of \tcode{h} +void q(const S &s) { h(s); } +\end{codeblock} \end{example} -\rSec0[vs]{Comparison to prior proposals} +\pnum +The same rule applies to the set of names found by ADL: +names visible along the path of instantiation are visible to ADL. +Internal-linkage declarations within the global module are ignored. +In addition, exported declarations in the owning module of +each associated type are visible to ADL. + +\rSec1[vs.r0.preamble]{Finding the end of the preamble} + +\pnum +In R0 of this proposal, the preprocessor was burdened with finding +the end of the preamble, and making macros from legacy header units +visible at that point. +That was problematic both for implementers (as it is a challenging rule +to implement) and for users (as code would silently do something +different from what was expected, and imports in a preamble would +behave differently from imports in non-modular code). +This proposal uses a simpler rule: +imported macros become visible immediately after the import declaration. + +\pnum +In order to make it practical to determine the set of imports of a +module unit without first compiling the imported legacy header units +(at least for a module unit with no global module fragment), +an additional restriction is imposed: +the program is ill-formed if, after reaching the preamble, +an imported macro is expanded +and then another import declaration is encountered. \rSec1[vs.ts]{Changes to the Modules TS} @@ -449,28 +525,13 @@ Under the Atom proposal, the semantics of such entities are instead determined their the properties -at the end of the module interface unit, -and that is the rule used in this merged proposal. -This is similar to the resolution of P0906R0 issue 1, -as discussed and approved by Evolution, -under which the semantic properties at the last such export are used. -The difference can be observed in a module such as: +at the end of the module interface unit. -\begin{codeblock} -export module M; -struct S; -export S f(); -struct S {}; -\end{codeblock} - -In the P0906R0 approach, -the return type of \tcode{f()} is incomplete -in importers of \tcode{M}, -so \tcode{f()} cannot be called. In this merged proposal, -the return type of \tcode{f()} is complete -because a definition of \tcode{S} -appears within the interface unit. +the semantics of all entities owned by a module +are determined by their properties +at the end of the module interface unit +(regardless of whether they are exported). \begin{note} The order in which declarations appear within a module interface has no bearing on which semantic properties are exported @@ -483,15 +544,11 @@ \pnum Entities declared within \tcode{extern "C"} and \tcode{extern "C++"} within a module are no longer owned by that module. -In the Modules TS, such declarations would be considered attached -to the module in whose purview they appear, -which means they can only be exported by one module -(although they can still be redeclared in multiple modules). +It is unclear whether this is a change from the intent of +the Modules TS. \pnum -The global module fragment can only -directly contain \tcode{\#include} directives, -not arbitrary code. +Namespace names are exported less often in this proposal, as discussed above. \rSec1[vs.atom]{Changes relative to the Atom proposal} @@ -499,24 +556,6 @@ This section lists the ways in which valid code under the Atom proposal would become invalid or change meaning in this merged proposal. -\pnum -When multiple declarations are provided for an entity, -and only some of them are declared \tcode{export}, -only the semantic effects of the exported declarations -are reachable outside the module. -Under the Atom proposal, -\tcode{export} only controls name visibility, -and all semantic effects in the module interface unit -(and in module partitions exported by it) -are exported. -The Atom rule intends to ensure that -reordering declarations cannot affect the exported semantics. -However, applying that change to the Modules TS -would interfere with its goal to always allow modules -to always be defined in a single source file. -The merged rule provides both properties. -The Atom rule is used for entities that are never exported. - \pnum The merged proposal supports global module fragments, which interferes with the Atom proposal's goal @@ -526,180 +565,7 @@ to those who choose not to put code in the global module fragment. \pnum -Under the Atom proposal, -we considered restricting the preprocessor constructs that may appear -within the preamble. -In this merged proposal, -the global module fragment is restricted -to only containing \tcode{\#include} directives, -but there are no restrictions on the contents -of the included file -as such restrictions would harm the ability -to put arbitrary code in the global module fragment, -as required by the Modules TS's legacy header support. - -\pnum -The identifiers \tcode{import} and \tcode{module} are taken as keywords +The identifiers \tcode{export} and \tcode{module} are taken as keywords by the merged proposal, rather than making them context-sensitive as proposed by the Atom proposal. This follows EWG's direction on this question from discussion of P0924R0. - -\pnum -The Atom proposal's rule for export of namespace names has not been adopted, -pending further discussion. See \ref{vs.open.namespace}. - -\pnum -The Atom rule for declaration reachability -has been relaxed to allow declarations owned by modules -to be considered reachable even if the owning module -is not reachable through a path of imports. - -\rSec2[vs.atom.extra]{Atom features not merged} - -\pnum -Two features of the Atom proposal were not presented at Jacksonville -due to time constraints. -Because these features have not been discussed in Evolution, -they are not part of the merged wording. They are: - -\begin{itemize} -\item -\tcode{public import} declarations. -These declarations provide a mechanism to re-export -the semantic properties of a module -without re-exporting its introduced names. -Such functionality is rendered mostly unnecessary -by the more liberal reachability rule -used for entities owned by modules -in the merged proposal. - -\item -\tcode{\#export} directives. -These preprocessor directives provide a mechanism -to export specific macros from named modules. -We anticipate further discussion on this topic -in the context of P0877R0 and P0955R0. -\end{itemize} - -\rSec1[vs.open]{Open questions} - -\pnum -While performing the merge, we encountered a few issues -for which we did not reach an agreement on the superior answer -and would like to solicit EWG input. - -\rSec2[vs.open.namespace]{Namespace export} - -\pnum -Under the Modules TS, -all namespaces -(excluding anonymous namespaces and those nested within them) -that are declared in a module interface unit -have external linkage and -are exported. -Under the Atom proposal, -all such namespace names -still have external linkage, -but are only exported if they are either -explicitly exported, or -if any name within them is exported. -\begin{note} -The Atom proposal permits implementation-detail namespace names -to be hidden from the interface of a module -despite being declared in a module interface unit. -\end{note} - -\pnum -\begin{example} -\begin{codeblock} -export module M; - -export namespace A {} // exported in Atom, TS, and merged proposal -namespace B { // exported in Atom, TS, and merged proposal - export int n; -} -namespace C { // exported in TS and merged proposal, not in Atom - int n; -} -\end{codeblock} -\end{example} - -\rSec2[vs.open.import.lex]{Lexing after \tcode{import}} - -\pnum -The Atom proposal introduces a change in the \Cpp{} lexing rules. -After the \tcode{import} token, -the preprocessor attempts to form a \term{header-name} -token where possible. -This permits usage of normal header names: - -\begin{codeblock} -import ; // forms \tcode{} header-name token -import "bar\baz.h"; // forms \tcode{"bar\textbackslash{}baz.h"} header-name token -\end{codeblock} - -\pnum -It has been suggested that we instead require use of -raw string literals for header names with escape sequences: - -\begin{codeblock} -import R; // forms \tcode{R} token -import R"bar\baz.h"; // forms \tcode{R"bar\textbackslash{}baz.h"} token -\end{codeblock} - -This avoids the need for a context-sensitive lexing rule, -but introduces a new form of raw angled string literal, -and has a \term{header-name} syntax distinct from -that used by a \tcode{\#include}. - -\rSec2[vs.open.nonexport]{Syntax for non-exported declarations} - -\pnum -Following the Modules TS, -the syntax for making a subset -of the semantic properties of an entity reachable -is to omit the \tcode{export} keyword -from some redeclarations: - -\begin{codeblock} -export module M; -export struct S; -// ... -struct S { ... }; -\end{codeblock} - -\pnum -This is not completely satisfying: -\begin{itemize} -\item the simplest syntax is reserved for a case that is -relatively rare in many code bases, and definitions may -fail to be exported by accident -\item the fact that the definition of \tcode{S} is not exported -is an important semantic property of the code, -but the code lacks a way to express that semantic property -\item unlike other specifiers affecting the linkage -of an entity, \tcode{export} is not inherited by redeclarations -\item this behavior does not extend to entities where -no declaration is exported -\end{itemize} - -As an alternative, an explicit syntax could be used -to specify that a declaration is excluded from the module interface -despite being in the module interface unit. -As a possible syntax: - -\begin{codeblock} -export module M; -export struct S; -export struct T; -struct U; -struct V; -// ... -struct S { ... }; // definition exported -noexport struct T { ... }; // definition not exported, - // despite \tcode{T} being exported -struct U { ... }; -noexport struct V { ... }; -export U *u(); // \tcode{*u()} has complete type in importers -export V *v(); // \tcode{*v()} has incomplete type in importers -\end{codeblock} diff --git a/src/config.tex b/src/config.tex index c2339a7..be7cdbc 100644 --- a/src/config.tex +++ b/src/config.tex @@ -6,7 +6,7 @@ %\newcommand{\cppver}{201703L} %% Title -\newcommand{\doctitle}{Modules Wording} +\newcommand{\doctitle}{Merging Modules} %% Release date \newcommand{\reldate}{\today} diff --git a/src/cover-wd.tex b/src/cover-wd.tex index c4d0607..6089d57 100644 --- a/src/cover-wd.tex +++ b/src/cover-wd.tex @@ -20,5 +20,5 @@ \begin{center} \textbf{\Huge -Modules Wording} +Merging Modules} \end{center} From a990360d8ccd895511ae2eab316a9c0e2eb1c331 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 2 Oct 2018 18:49:18 -0700 Subject: [PATCH 18/77] Switch from "delta to the Modules TS" wording to "delta to the C++ working draft" wording. --- src/bg.tex | 53 ++++++++++++++++++++++++++----------------------- src/lexical.tex | 4 ++-- src/macros.tex | 15 +++++++------- src/ts.tex | 17 +++++++--------- 4 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index 6e10528..e8abc13 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -25,31 +25,34 @@ At the Bellevue 2018 ad-hoc Modules meeting, we answered all remaining known open design questions. This paper provides a -description and wording for the resulting design. - -\rSec1[bg.conventions]{Stylistic conventions} - -The wording section of this document describes a ``diff of a diff.'' -The usual convention of using text style for \added{added} and -\removed{removed} text does not work well for such situations. -In its place, we use block-style diffs -showing the text of the Modules TS -before and after this document is applied: - -\begin{before} -Here is some text from the \Cpp standard -\added{with some additions from the Modules TS}. -\end{before} - -\begin{after} -Here is some text from the \Cpp standard -\added{with some additions from the Modules TS} -\added{and some more from the Atom proposal}. -\end{after} - -Unchanged text from the Modules TS is retained in this document so that a -complete picture of the ``after'' wording may be obtained by simply ignoring -the ``before'' regions. +description for the resulting design, as well as wording +(based on the wording in P1103R0, which in turn is based on +the wording of the Modules TS) to incorporate this design +into the C++20 working draft. + +%\rSec1[bg.conventions]{Stylistic conventions} +% +%The wording section of this document describes a ``diff of a diff.'' +%The usual convention of using text style for \added{added} and +%\removed{removed} text does not work well for such situations. +%In its place, we use block-style diffs +%showing the text of the Modules TS +%before and after this document is applied: +% +%\begin{before} +%Here is some text from the \Cpp standard +%\added{with some additions from the Modules TS}. +%\end{before} +% +%\begin{after} +%Here is some text from the \Cpp standard +%\added{with some additions from the Modules TS} +%\added{and some more from the Atom proposal}. +%\end{after} +% +%Unchanged text from the Modules TS is retained in this document so that a +%complete picture of the ``after'' wording may be obtained by simply ignoring +%the ``before'' regions. \rSec0[merged]{Summary of merged proposal} diff --git a/src/lexical.tex b/src/lexical.tex index cb8c97b..21f6ea1 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -39,11 +39,11 @@ The process of analyzing and translating the tokens may occasionally result in one token being replaced by a sequence of other tokens (17.2). \exitnote - \added{It is implementation-defined whether the source for} + \added{It is implementation-defined whether the sources for} \begin{before}\added{module interface units for modules}\end{before} \begin{after}\added{module units}\end{after} \added{on which the current translation unit has an interface - dependency (\ref{dcl.module.import}) is required to be available.} + dependency (\ref{dcl.module.import}) are required to be available.} \enternote Source files, translation units and translated translation units need not necessarily be stored as files, nor need there be any one-to-one diff --git a/src/macros.tex b/src/macros.tex index d6f64a2..e297500 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -512,16 +512,17 @@ } \newcommand{\defncontext}[1]{\textlangle#1\textrangle} -\newenvironment{before}{ -\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black,title=Before] -}{ -\end{tcolorbox} -} +\NewEnviron{before}{} +%\newenvironment{before}{ +%\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black,title=Before] +%}{ +%\end{tcolorbox} +%} \newenvironment{after}{ -\begin{tcolorbox}[colback=green!5!white,colframe=green!75!black,title=After] +%\begin{tcolorbox}[colback=green!5!white,colframe=green!75!black,title=After] }{ -\end{tcolorbox} +%\end{tcolorbox} } % Wording on which the authors disagree. diff --git a/src/ts.tex b/src/ts.tex index 03580fb..137378c 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -47,6 +47,7 @@ \usepackage{memhfixc} % fix interactions between hyperref and memoir \usepackage{xstring} \usepackage{tcolorbox} +\usepackage{environ} %\tcbuselibrary{breakable} \input{layout} @@ -126,16 +127,12 @@ %%-------------------------------------------------- %% part 2: wording -\part[Wording]{Wording for merging Atom into the Modules TS}\label{wording} -\begin{note} -The wording given here is known to be incomplete, -and not up to date with the design. -\end{note} - -\include{scope} -\include{references} -\include{definitions} -\include{general} +\part[Wording]{Wording for applying the merged modules proposal to the C++20 working draft}\label{wording} + +%\include{scope} +%\include{references} +%\include{definitions} +%\include{general} \include{lexical} \include{basic} \include{declarations} From f4547a0a9367d79dbcddd92accb49243bc5212b1 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 2 Oct 2018 18:58:59 -0700 Subject: [PATCH 19/77] Cleanups. --- src/ts.tex | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/ts.tex b/src/ts.tex index 137378c..d0a7850 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -31,9 +31,9 @@ \usepackage[T1]{fontenc} \usepackage[pdftex, final]{graphicx} \usepackage[pdftex, - pdftitle={C++ Technical Specification}, - pdfsubject={C++ Technical Specification}, - pdfcreator={Gabriel Dos~Reis}, + pdftitle={Merging Modules}, + pdfsubject={Merging Modules}, + pdfcreator={Richard Smith}, bookmarks=true, bookmarksnumbered=true, pdfpagelabels=true, @@ -59,27 +59,11 @@ \makeindex[libraryindex] \makeindex[impldefindex] -%%-------------------------------------------------- -%% macros specific to the Networking TS -\newcommand{\completionsig}{\Fundesc{Completion signature}} -\newcommand{\DEDUCED}{\textit{\texttt{DEDUCED}}} -\newcommand{\nativeref}{see~\ref{socket.reqmts.native}} -\newcommand{\CppXref}[1]{\texorpdfstring{C\kern-0.05em\protect\raisebox{.35ex}{\textsmaller[2]{+\kern-0.05em+}}Std}{C++Std} [#1]} -% Alternative formatting of cross-references, resolving stable name to number. -% Needs include{cxx} and CppXIV from cplusplus/draft/source/macros.tex. -% \input{cxx} -% \newcommand{\CppXref}[1]{\CppXIV \S\cxxref{#1}} - % Add two names to the library index as both #1!#2 and #2!#1 \newcommand{\indexlibrarytwo}[2]{% \indexlibrary{\idxcode{#1}!\idxcode{#2}}% \indexlibrary{\idxcode{#2}!\idxcode{#1}}% } -% Add an extensible implementation entry to the main and library name indices -\newcommand{\indexextensible}[1]{% -\indextext{extensible implementation!\idxcode{#1}}% -\indexlibrary{\idxcode{#1}!extensible implementation}% -} %%-------------------------------------------------- %% fix interaction between hyperref and other From d1f7334cd4226b942a56f876a93acf9c5d822eab Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 4 Oct 2018 18:11:00 -0700 Subject: [PATCH 20/77] Updates < [dcl.module.reach]. --- src/basic.tex | 329 ++++++++------------ src/declarations.tex | 710 +++++++++++++++++++------------------------ src/lexical.tex | 7 +- 3 files changed, 444 insertions(+), 602 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index a1d19ca..b7bf89d 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -1,50 +1,7 @@ %!TEX root = std.tex +\setcounter{chapter}{5} \rSec0[basic]{Basic concepts} -%gram: \rSec1[gram.basic]{Basic concepts} -%gram: - -\begin{undecided} - -\noindent -Modify paragraph 6/3 as follows: - -%\pnum -\resetalinea[2] -\begin{std.txt} -\alinea - An \emph{entity} is a value, object, reference, function, - enumerator, type, class member, bit-field, template, template - specialization, namespace, \added{module}, or parameter pack. -\end{std.txt} - -\noindent -Modify paragraph 6/4 as follows: - -\resetalinea[3] -\begin{std.txt} -\alinea - A \emph{name} is a use of an \grammarterm{identifier} (5.10), - \grammarterm{operator-function-id} (16.5), \grammarterm{literal-operator-id} - (16.5.8), - \grammarterm{conversion-function-id} (15.3.2), \removed{or } - \grammarterm{template-id} (17.2), \added{or \grammarterm{module-name} (10.7)} that - denotes an entity or \grammarterm{label} (9.6.4, 9.1). -\end{std.txt} - -\noindent -Add a sixth bullet to paragraph 6/8 as follows: - -\resetalinea[7] -\begin{std.txt}\color{addclr} - \begin{itemize} - \item[--] \added{they are \grammarterm{module-name}{s} composed of the same - dotted sequence of \grammarterm{identifier}{s}.} - \end{itemize} -\end{std.txt} - -\end{undecided} - \rSec1[basic.def]{Declarations and definitions} Modify paragraph 6.1/1 as follows: @@ -60,59 +17,34 @@ \end{std.txt} \noindent -Append the following two bullets to paragraph 6.1/2: +Add the following two bullets to paragraph 6.1/2: \begin{std.txt} \resetalinea[1] \alinea - A declaration is a \term{definition} unless + Each entity declared by a \grammarterm{declaration} is also \term{defined} + by that declaration unless: \begin{itemize} \item ... - \item it is an explicit specialization (17.7.3) whose \grammarterm{declaration} - is not definition\removed{.}\added{,} \color{addclr} \item \added{it is a \grammarterm{module-import-declaration},} - \item \begin{before}\added{it is a \grammarterm{proclaimed-ownership-declaration}.}\end{before} + \color{black} + \item ... \end{itemize} - \color{addclr} -% \begin{example} -\enterexample -\begin{before}\color{addclr} -\begin{codeblock} - import std.io; // make names from std.io available - export module M; // toplevel declaration for M - export struct Point { // define and export Point - int x; - int y; - }; -\end{codeblock} -\end{before}\begin{after}\color{addclr} -\begin{codeblock} - export module M; // toplevel declaration for M - import std.io; // make names from std.io available - export struct Point { // define and export Point - int x; - int y; - }; -\end{codeblock} -\end{after} -\exitexample \end{std.txt} \rSec1[basic.def.odr]{One-definition rule} -Replace paragraph 6.2/1 with: -\begin{std.txt}\color{addclr} +Change paragraph 6.2/1 as follows: +\begin{std.txt} \resetalinea[0] \alinea - \added{A variable, function, class type, enumeration type, or template shall not - be defined where a prior definition is reachable} - \begin{before} - \added{(\ref{basic.lookup}).} - \end{before} - \begin{after} - \added{(\ref{dcl.module.reach}).} - \end{after} + \removed{No translation unit shall contain more than one definition + of any} + \added{A} + variable, function, class type, enumeration type, or template + \added{shall not be defined where a prior definition is reachable + (\ref{dcl.module.reach})}. \end{std.txt} Modify opening of paragraph 6.2/6 as follows @@ -120,24 +52,20 @@ \begin{std.txt} \resetalinea[5] \alinea - There can be more than one definition of a class type (Clause 12), - enumeration type (10.2), inline function with external \added{or module} - linkage (10.1.6), - inline variable with external \added{or module} linkage (10.1.6), - class template (Clause 17), - non-static function template (17.5.6), static data member of a class - template (17.5.1.3), member function of a class template (17.5.1.1), or + There can be more than one definition of a class type (Clause 10), + enumeration type (9.6), inline function with external \added{or module} + linkage (9.1.6), + inline variable with external \added{or module} linkage (9.1.6), + class template (Clause 12), + non-static function template (12.6.6), + static data member of a class + template (12.6.1.3), member function of a class template (12.6.1.1), or template specialization for which some template parameters are not - specified (17.7, 17.5.5) in a program provided that \removed{each definition appears + specified (12.8, 12.6.5) in a program provided that + \removed{each definition appears in a different translation unit} - \added{no prior definition is reachable} - \begin{before} - \added{(\ref{basic.lookup})} - \end{before} - \begin{after} - \added{(\ref{dcl.module.reach})} - \end{after} - \added{at the point where a definition appears}, + \added{no prior definition is reachable (\ref{dcl.module.reach}) + at the point where a definition appears}, and provided the definitions satisfy the following requirements. \begin{before} @@ -150,13 +78,11 @@ \exitnote} \end{before} \begin{after} - \added{For an entity with an exported declaration, there shall be only one - definition of that entity; no diagnostic is required unless a prior definition - is reachable at a point where a later definition appears.} - \added{\enternote - If the definition is in a module implementation unit, then the definition - will only be reachable in that translation unit. - \exitnote} + \added{There shall not be more than one definition + of an entity with external linkage + that is attached to a named module; + no diagnostic is required unless a prior definition + is reachable at a point where a later definition appears.} \end{after} Given such an entity named \tcode{D} defined in more than one translation unit, then @@ -164,29 +90,9 @@ \rSec1[basic.scope]{Scope}% -\begin{undecided} - -\setcounter{subsection}{1} -\rSec2[basic.scope.pdecl]{Point of declaration} - -\noindent -Add a new paragraph 6.3.2/13 as follows: -\resetalinea[12] -\begin{std.txt}\color{addclr} -\alinea - \added{The point of declaration of a module is immediately after the - \term{module-name} in a \grammarterm{module-declaration}.} -\end{std.txt} - -\end{undecided} - \setcounter{subsection}{5} \rSec2[basic.scope.namespace]{Namespace scope} -From end-user perspective, there are really no new lookup rules to -learn. The ``old'' rules are the ``new'' rules, with appropriate -adjustment in the definition of ``associated entities.'' - \noindent Modify paragraph 6.3.6/1 as follows: \begin{std.txt} @@ -203,7 +109,7 @@ scope. Its potential scope includes its namespace from the name's point of declaration (6.3.2) onwards; and for each \grammarterm{using-directive} - (10.3.4) that nominates the member's namespace, the member's + (9.7.3) that nominates the member's namespace, the member's potential scope includes that portion of the potential scope of the \grammarterm{using-directive} that follows the member's point of declaration. @@ -223,7 +129,8 @@ the potential scope of a name $X$ declared with namespace scope in $M$ is extended to include the portion of the corresponding namespace scope in $N$ following the first \grammarterm{module-import-declaration} -in $N$ that directly or indirectly nominates $M$ if +or \grammarterm{module-declaration} +in $N$ that directly or indirectly imports $M$ if } \color{addclr} \begin{itemize} \item \added{$X$ does not have internal linkage, and} @@ -236,6 +143,12 @@ % the potential scope of X includes the % portion of the potential scope of the \term{using-directive} that % follows that \term{module-import-declaration}. + \added{\enternote + A \grammarterm{module-import-declaration} imports both the named + translation unit(s) and any modules named by exported + \grammarterm{module-import-declaration}{s} within them, + recursively (\ref{dcl.module.export}). + \exitnote} \enterexample \begin{codeblock} // Translation unit \#1 @@ -243,7 +156,11 @@ export int sq(int i) { return i*i; } // Translation unit \#2 - import M; + export module N; + export import M; + + // Translation unit \#3 + import N; int main() { return sq(9); } // OK: 'sq' from module M \end{codeblock} \exitexample @@ -258,26 +175,29 @@ \resetalinea[0] \alinea The name lookup rules apply uniformly to all names - (including \grammarterm{typedef-name}{s} (10.1.3), - \grammarterm{namespace-name}{s} (10.3), and - \grammarterm{class-name}{s} (12.1)) + (including \grammarterm{typedef-name}{s} (9.1.3), + \grammarterm{namespace-name}{s} (9.7), and + \grammarterm{class-name}{s} (10.1)) wherever the grammar allows such names in the context discussed by a particular rule. Name lookup associates the use of a name with a set of declarations (6.1) -\begin{undecided} +\begin{before} \added{or citations (\ref{dcl.module.import})} -\end{undecided} +\end{before} of that name. -\begin{undecided} +\begin{before} %%% FIXME: If we keep this, fix the typo "intent" -> "intents" \added{For all intent and purposes of further semantic processing requiring declarations, a citation is replaced with the declarations contained in its declset.} -\end{undecided} +\end{before} [...] Only after name lookup, function overload resolution (if applicable) and access checking have succeeded are the - \removed{attributes}\added{semantic properties} introduced by the name's - declaration used further in the expression processing (Clause 8). + \removed{attributes}\added{semantic properties} introduced by + \removed{the name's declaration} + \added{the reachable (\ref{dcl.module.reach}) redeclarations + of that declaration} + used further in the expression processing (Clause 7). \end{std.txt} % Moved to dcl.module.reach with some changes. @@ -294,14 +214,13 @@ \setcounter{subsection}{1} \rSec2[basic.lookup.argdep]{Argument-dependent name lookup} -%%% TODO: restrict module ADL to only declarations in the module? \noindent Modify paragraph 6.4.2/2 as follows: \begin{std.txt} \resetalinea[1] \alinea For each argument type \tcode{T} in the function call, there is a - set of zero or more \term{associated namespaces} (10.3) and a set of + set of zero or more \term{associated namespaces} and a set of zero or more \term{associated \removed{classes} \added{entities}} \added{(other than namespaces)} to be considered. The sets of namespaces and \removed{classes} \added{entities} are determined @@ -353,7 +272,7 @@ member type together with those associated with \tcode{X}. \end{itemize} - If an associated namespace is an inline namespace (10.3.1), its + If an associated namespace is an inline namespace (9.7.1), its enclosing namespace is also included in the set. If an associated namespace directly contains inline namespaces, those inline namespaces are also included in the set. In addition, if the @@ -383,33 +302,29 @@ namespace are ignored. \item Any namespace-scope friend declaration functions or friend - function templates declared in \removed{associated} + function templates (10.7.3) declared in \removed{associated} classes \added{in the set of associated entities} are visible within their respective namespaces even if they are not visible during an - ordinary lookup (14.3). + ordinary lookup (9.7.1.2). \item All names except those of (possibly overloaded) functions and function templates are ignored. \color{addclr} \item[---] - %\begin{before} - \added{In resolving dependent names (17.6.4), any} - %\end{before} - %\begin{after}\added{Any}\end{after} - \added{function or function template that is owned by a - named module \tcode{M} (10.7), that is - declared in} - \begin{before} - \added{the} - \end{before} - \begin{after} - \added{a} - \end{after} - \added{module interface unit of \tcode{M}, and that has + \added{Any function or function template in the interface of + a named module \tcode{M} (\ref{dcl.module}) that has the same innermost enclosing non-inline namespace as some entity - owned by \tcode{M} in the set of associated entities, is visible - within its namespace even if it is not exported.} + attached to \tcode{M} in the set of associated entities is visible + within its namespace + to a lookup that does not occur within a module unit of \tcode{M}, + even if it is not visible during an ordinary lookup.} + + \item[---] + \added{All declarations that are visible in the instantiation + context (\ref{dcl.module.context}) of the lookup are visible + even if they are not visible during an ordinary lookup, + excluding internal linkage declarations attached to the global module.} \end{itemize} \end{std.txt} @@ -446,12 +361,19 @@ \added{preamble\opt} declaration-seq\opt \end{bnf} +\begin{bnf} +\added{\nonterminal{global-module-fragment}:\br + \terminal{module} \terminal{;} declaration-seq} +\end{bnf} + \begin{bnf} \added{\nonterminal{preamble}:\br - \terminal{module} \terminal{;} declaration-seq module-declaration\br - module-declaration\br + global-module-fragment\opt module-declaration\br preamble\opt module-import-declaration} \end{bnf} + +\added{The \grammarterm{preamble} includes the longest possible sequence of +\grammarterm{module-import-declaration}{s}.} \end{after} \noindent @@ -507,12 +429,12 @@ \begin{itemize} \item a variable; or \item a function; or - \item a named class (Clause 12), or an unnamed class defined in a + \item a named class (Clause 10), or an unnamed class defined in a typedef declaration in which the class has the typedef name for - linkage purposes (10.1.3); or - \item a named enumeration (10.2), or an unnamed enumeration defined in + linkage purposes (9.1.3); or + \item a named enumeration (9.6), or an unnamed enumeration defined in a typedef declaration in which the enumeration has the typedef name for - linkage purposes (10.1.3); or + linkage purposes (9.1.3); or \item a template\removed{.} \end{itemize} \begin{before}\color{addclr} @@ -532,11 +454,11 @@ \item \added{if the enclosing namespace has internal linkage, the name has internal linkage;} \item \added{otherwise, if - the declaration of the name is attached to a named module, - is not exported (\ref{dcl.module.interface}), - and is not declared in a + the declaration of the name is attached to a named module + and is not exported (\ref{dcl.module.interface}), + %and is not declared in a %\grammarterm{proclaimed-ownership-declaration} or a - \grammarterm{linkage-specification}, + %\grammarterm{linkage-specification}, the name has module linkage;} \item \added{otherwise, the name has external linkage}. \end{itemize} @@ -550,13 +472,14 @@ \resetalinea[5] \alinea The name of a function declared in block scope and the name of a -variable declared by a block scope extern declaration have linkage. If -there is a visible declaration of an entity with linkage having the +variable declared by a block scope extern declaration have linkage. +If there is a visible declaration of an entity with linkage having the same name and type, ignoring entities declared outside the innermost enclosing namespace scope, the block scope declaration declares that same entity and receives the linkage of the previous declaration. \begin{before} \added{If that entity was exported by an imported module + or if the containing block scope is in the purview of a named module, the program is ill-formed.} \end{before} @@ -565,53 +488,71 @@ ill-formed. Otherwise, if no matching entity is found, the block scope entity receives external linkage. \begin{after} -\added{In either case, if the declared entity would be owned by a named module, +\added{If the declaration is attached to a named module, the program is ill-formed.} \end{after} \end{std.txt} \noindent -Modify paragraph 6.5/9 as follows: +Modify paragraph 6.5/9 and add /10 as follows: \begin{std.txt} \resetalinea[8] \alinea \addtocounter{footnote}{1} - Two names that are the same (Clause 9) and that are declared in different scopes + Two + names that are the same (Clause 6) and that are declared in different scopes shall denote the same variable, function, type, template or namespace if \begin{itemize} \item[---] both names have external \added{or module} linkage - \added{and are declared in declarations attached to the - same module}% - {\color{addclr}\footnote{\added{This provision supports implementations where - exported entities in different modules have different implementation - symbols. Conversely, for other implementations, exported entities - have the same implementation symbols regardless of in which - module they are declared. Such implementations are supported - for the time being by disallowing all situations where the same names - with external linkage might appear from different modules.}}}\added{,} - or else both names have internal linkage and are declared in + \added{and are declared in declarations attached to the + same module,} + or else both names have internal linkage and are declared in the same translation unit; and \item both names refer to members of the same namespace or to members, not by inheritance, of the same class; and \item when both names denote functions, the parameter-type-lists of the - functions (11.3.5) are identical; and + functions (9.2.3.5) are identical; and - \item when both names denote function templates, the signatures (17.5.6.1) - ar the same. + \item when both names denote function templates, the signatures (12.6.6.1) + are the same. \end{itemize} - \added{If two declarations - declaring entities (other than namespaces) and attached to - different modules introduce two names that are the same - and that both have external linkage, the program is ill-formed; no - diagnostic required. + \added{If multiple declarations of the same name with external linkage + would declare the same entity except that they are attached to different + modules, the program is ill-formed; no diagnostic is required. \enternote \grammarterm{using-declaration}{s}, typedef declarations, and \grammarterm{alias-declaration}{s} do not declare entities, but - merely introduce synonyms. Similarly, \grammarterm{using-directive}{s} - do not declare entities, either. + merely introduce synonyms. Similarly, \grammarterm{using-directive}{s} + do not declare entities. \exitnote} + + \alinea + \added{If a declaration would redeclare a reachable declaration + attached to a different module, the program is ill-formed.} + \color{addclr} + \begin{example} + \begin{codeblock} + // module interface of M + module; + int f(); // \#1 + int g(); // \#2, owned by the global module + export module M; + export using ::f; // OK: does not declare an entity + int g(); // error: matches \#2, but appears in the purview of M + export int h(); // \#3 + export int k(); // \#4 + + // other translation unit + import M; + static int h(); // error: matches \#3 + int k(); // error: matches \#4 + \end{codeblock} + \end{example} + \added{As a consequence of these rules, + all declarations of an entity are attached to the same module; + the entity is said to be attached to that module.} \end{std.txt} @@ -631,7 +572,7 @@ \added{declared in the purview of the global module}. \end{before} \begin{after} - \added{owned by the global module}. + \added{attached to the global module}. \end{after} \end{std.txt} diff --git a/src/declarations.tex b/src/declarations.tex index 41e0293..cedcc50 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -1,5 +1,5 @@ %!TEX root = std.tex -\setcounter{chapter}{9} +\setcounter{chapter}{8} \rSec0[dcl.dcl]{Declarations}% %\indextext{declaration|(} @@ -7,7 +7,7 @@ %gram: \noindent -Add new alternatives to \term{declaration} in paragraph 10/1 as follows +Add new alternatives to \term{declaration} in paragraph 9/1 as follows \begin{std.txt} \begin{bnf} \nonterminal{declaration}:\br @@ -32,33 +32,11 @@ \setcounter{section}{0} \rSec1[dcl.spec]{Specifiers}% -\setcounter{subsection}{1} -\rSec2[dcl.fct.spec]{Function specifiers}% - -\noindent -Add a new paragraph 10.1.2/7 as follows: -\begin{std.txt} - \color{addclr} - \resetalinea[6] - \alinea - \added{An exported inline function shall be defined in the same translation - unit containing its export declaration. -% That semantic property -% is a reachable semantic property (\ref{dcl.module.reach}) even if -% the definition is not exported (\ref{dcl.module.interface}). - \enternote - There is no restriction on the linkage (or absence thereof) - of entities that the function body of an exported inline function - can reference. A constexpr function (10.1.5) is implicitly inline. - \exitnote} -\end{std.txt} - - \setcounter{subsection}{5} -\rSec6[dcl.inline]{The \tcode{inline} specifier}% +\rSec2[dcl.inline]{The \tcode{inline} specifier}% \noindent -Modify paragraph 10.1.6/6 as follows +Modify paragraph 9.1.6/6 as follows \begin{std.txt} \resetalinea[5] \alinea @@ -72,14 +50,18 @@ the inline variable may be encountered before its definition appears in the translation unit. \exitnote - If the definition of a function or variable appears in a translation unit - before its first declaration as inline, the program is ill-formed. If a + If the definition of a\added{n inline} function or variable + appears in a translation unit + \added{at a point where no inline declaration of it is visible} + \removed{before its first declaration as inline}, + the program is ill-formed. If a function or variable with external \added{or module} linkage is - \removed{declared}\added{reachable via an} - inline \added{declaration} in one translation - unit, it shall be \removed{declared}\added{reachable via an} inline + declared inline in one translation + unit, + \added{there} \removed{it} shall be + \added{a visible} \removed{declared} inline \added{declaration} in all translation units in which it - \removed{appears}\added{is reachable}; + \removed{appears}\added{is declared}; no diagnostic is required. An inline function or variable with external \added{or module} linkage shall have the same address in all translation units. @@ -92,15 +74,28 @@ \exitnote \end{std.txt} +\noindent +Add a new paragraph 9.1.6/7 as follows: +\begin{std.txt} + \color{addclr} + \resetalinea[6] + \alinea + \added{An exported inline function or variable + shall be defined in the translation unit + containing its exported declaration. + \enternote + There is no restriction on the linkage (or absence thereof) + of entities that the function body of an exported inline function + can reference. A constexpr function (9.1.5) is implicitly inline. + \exitnote} +\end{std.txt} - - -\setcounter{section}{2} +\setcounter{section}{6} \rSec1[basic.namespace]{Namespaces}% %\indextext{namespaces|(} \noindent -Modify paragraph 10.3/1 as follows: +Add a new paragraph after 9.7/1 as follows: \begin{std.txt} \resetalinea[0] \alinea @@ -109,75 +104,48 @@ that is, the members of the namespace. Unlike other declarative regions, the definition of a namespace can be split over several parts of one or more translation units. - %%% TODO: Decide if we want this rule or the "namespace names are - %%% exported only if their name or some name within them is exported" rule. - \begin{undecided} - \added{A namespace with external linkage is always - exported regardless of whether any of its \term{namespace-definition}{s} is - introduced by \tcode{export}. - \enternote - There is no way to define a namespace with module linkage. - \exitnote - }\color{addclr} + + %\begin{before} + %\added{A namespace with external linkage is always + % exported regardless of whether any of its \term{namespace-definition}{s} is + % introduced by \tcode{export}. + % \enternote + % There is no way to define a namespace with module linkage. + % \exitnote + %}\color{addclr} + %\begin{example} + %\begin{codeblock} + % export module M; + % namespace N { // N has external linkage and is exported + % } + %\end{codeblock} + %\end{example} + %\end{before} + \alinea + \begin{after} + \added{\enternote A namespace name with external linkage is exported + if any of its \term{namespace-definition}{s} is + exported, or if it contains any + \grammarterm{export-declaration}{s} (\ref{dcl.module.interface}). + A namespace is never attached to a module, and never has module + linkage even if it is not exported. + \exitnote} + \color{addclr} \begin{example} \begin{codeblock} export module M; - namespace N { // N has external linkage and is exported - } + namespace N1 {} // \tcode{N1} is not exported + export namespace N2 {} // \tcode{N2} is exported + namespace N3 { export int n; } // \tcode{N3} is exported \end{codeblock} \end{example} - \end{undecided} -%%% \begin{after} -%%% \added{A namespace with external linkage is exported -%%% if any of its \term{namespace-definition}{s} is -%%% introduced by \tcode{export}, or if it contains any -%%% \grammarterm{export-declaration}{s}.} -%%% \enternote -%%% Excluding anonymous namespaces and namespaces nested within -%%% them, a namespace always has external linkage even if it is -%%% not exported. -%%% \exitnote -%%% \color{addclr} -%%% \begin{example} -%%% \begin{codeblock} -%%% export module M; -%%% namespace N1 {} // \tcode{N1} is not exported -%%% export namespace N2 {} // \tcode{N2} is exported -%%% namespace N3 { export int n; } // \tcode{N3} is exported -%%% \end{codeblock} -%%% \end{example} -%%% \end{after} -\end{std.txt} - -\begin{undecided} -\setcounter{subsection}{2} -\rSec2[namespace.udecl]{The \tcode{using} declaration} - -Modify paragraph 10.3.3/1 as follows: -\begin{std.txt} - \resetalinea[0] - \alinea - Each \grammarterm{using-declarator} in a \grammarterm{using-declaration} - introduces a set of declarations \added{and citations} into the declarative - region in which the - \grammarterm{using-declaration} appears. The set of declarations - \added{and citations} - introduced by - the \grammarterm{using-declarator} is found by performing qualified name - lookup (6.4.3, 13.2) for the name in the \grammarterm{using-declarator}, - excluding functions that are hidden as described below. If the - \grammarterm{using-declarator} does not name a constructor, the - \grammarterm{unqualified-id} is declared in the declarative region in which - the \grammarterm{using-declaration} appears as a synonym for each - declaration \added{or citation} - introduced by the \grammarterm{using-declarator}. [...] + \end{after} \end{std.txt} -\end{undecided} \noindent -Add a new subclause 10.7 titled ``\textbf{Modules}'' as follows: +Add a new subclause 9.11 titled ``\textbf{Modules}'' as follows: -\setcounter{section}{6} +\setcounter{section}{10} \rSec1[dcl.module]{Modules}% \rSec2[dcl.module.unit]{Module units and purviews} @@ -222,13 +190,18 @@ \alinea A \term{module unit} is a translation unit that contains a \grammarterm{module-declaration}. A \term{named module} is the collection of module units with the same \grammarterm{module-name}. +\begin{after}\color{addclr} +Two \grammarterm{module-name}{s} are the same if they are +composed of the same dotted sequence of \grammarterm{identifier}{s}. +\end{after} \begin{before}\color{addclr} % This follows from the grammar now. A translation unit shall not contain more than one \grammarterm{module-declaration}. -\end{before} +% Modules aren't entities and don't have linkage. A \grammarterm{module-name} has external linkage but cannot be found by name lookup. +\end{before} \alinea A \term{module interface unit} is a module unit whose @@ -249,7 +222,7 @@ a module unit whose \grammarterm{module-declaration} contains a \grammarterm{module-partition}. A named module shall not contain multiple module partitions with -the same sequence of \grammarterm{identifier}{s} in their +the same dotted sequence of \grammarterm{identifier}{s} in their \grammarterm{module-partition}. All module partitions of a module that are module interface units @@ -336,106 +309,51 @@ \begin{after}\color{addclr} A declaration is \term{attached} to a module determined as follows: \begin{itemize}\color{addclr} - \item If the declaration is of a replaceable global allocation or deallocation - function (\stdref{new.delete.single}{21.6.2.1}, \stdref{new.delete.array}{21.6.2.2}), + \item If the declaration is + \begin{itemize}\color{addclr} + \item a replaceable global allocation or deallocation + function (\stdref{new.delete.single}{21.6.2.1}, \stdref{new.delete.array}{21.6.2.2}), or + \item a \grammarterm{namespace-declaration} with external linkage, or + \item within a \grammarterm{linkage-specification}, + \end{itemize}\color{addclr} it is attached to the global module. - \item Otherwise, if the declaration is a - \grammarterm{namespace-declaration} with external linkage, it - is attached to the global module. - -% \item Otherwise, if the declaration is -% within a \grammarterm{proclaimed-ownership-declaration}, it -% is attached to the module nominated by the -% \grammarterm{proclaimed-ownership-declaration}. - - \item Otherwise, if the declaration is - within a \grammarterm{linkage-specification}, it - is attached to the global module. - \item Otherwise, the declaration is attached to the module in whose purview it appears. \end{itemize} \end{after} - \alinea - \begin{before}\color{addclr} -For a namespace-scope declaration $D$ of an entity (other than a -namespace), if $D$ is within a \grammarterm{proclaimed-ownership-declaration} -for a module $X$, the entity is said to be \term{owned} by $X$. -Otherwise, if $D$ is the first declaration of that entity, then that entity is said -to be \term{owned} by the module in whose purview $D$ appears. -\end{before} -\begin{after}\color{addclr} -An entity introduced at namespace scope is \term{owned} by the -module to which its first declaration is attached. -\end{after} +% Notion of 'ownership' is unused; removed. +% \alinea +% \begin{before}\color{addclr} +%For a namespace-scope declaration $D$ of an entity (other than a +%namespace), if $D$ is within a \grammarterm{proclaimed-ownership-declaration} +%for a module $X$, the entity is said to be \term{owned} by $X$. +%Otherwise, if $D$ is the first declaration of that entity, then that entity is said +%to be \term{owned} by the module in whose purview $D$ appears. +%\end{before} +%\begin{after}\color{addclr} +%An entity introduced at namespace scope is \term{owned} by the +%module to which its first declaration is attached. +%\end{after} \alinea - If a declaration attached to some module - matches (according to the redeclaration rules) a reachable declaration - \begin{before}\color{addclr} - from - \end{before} - \begin{after}\color{addclr} - attached to - \end{after} - a different module, - the program is ill-formed. - \begin{example} - \begin{before}\color{addclr} - \begin{codeblock} - // module interface of M - int f(); // \#1 - int g(); // \#2, owned by the global module - export module M; - export using ::f; // OK: does not declare an entity - int g(); // error: matches \#2, but appears in the purview of M - export int h(); // \#3 - export int k(); // \#4 - - // other translation unit - import M; - static int h(); // error: matches \#3 - int k(); // error: matches \#4 - \end{codeblock} - \end{before}\begin{after}\color{addclr} - \begin{codeblock} - // module interface of M - module; - int f(); // \#1 - int g(); // \#2, owned by the global module - export module M; - export using ::f; // OK: does not declare an entity - int g(); // error: matches \#2, but appears in the purview of M - export int h(); // \#3 - export int k(); // \#4 - - // other translation unit - import M; - static int h(); // error: matches \#3 - int k(); // error: matches \#4 - \end{codeblock} - \end{after} - \end{example} - - \alinea -\begin{before}\color{addclr} - The subgraph of the abstract semantics graph $G$ of a module $M$ - generated by the nodes of $G$, excluding those introducing names - with internal linkage, is available to name lookup in the purview of every - module implementation unit of $M$. - The declsets made available by the \grammarterm{module-import-declaration}{s} - in the purview of - %\begin{before} - the module interface unit of $M$ - %\end{before} - %\begin{after} - %the module interface units of $M$ - %\end{after} - are also available to name lookup in the purview of all - module implementation units of $M$. -\end{before} +%\begin{before}\color{addclr} +% The subgraph of the abstract semantics graph $G$ of a module $M$ +% generated by the nodes of $G$, excluding those introducing names +% with internal linkage, is available to name lookup in the purview of every +% module implementation unit of $M$. +% The declsets made available by the \grammarterm{module-import-declaration}{s} +% in the purview of +% %\begin{before} +% the module interface unit of $M$ +% %\end{before} +% %\begin{after} +% %the module interface units of $M$ +% %\end{after} +% are also available to name lookup in the purview of all +% module implementation units of $M$. +%\end{before} \begin{after}\color{addclr} A \grammarterm{module-declaration} that contains neither \tcode{export} @@ -488,45 +406,51 @@ at namespace scope and only in the purview of a module interface unit. An \grammarterm{export-declaration} shall not appear directly or indirectly within an unnamed namespace. - An \grammarterm{exported-declaration} + An \grammarterm{export-declaration} has the declarative effects of its \grammarterm{declaration} or its \grammarterm{declaration-seq} (if any). An \grammarterm{export-declaration} does not - establish a scope and shall not contain more than one - \tcode{export} keyword. + establish a scope and its \grammarterm{declaration} + or \grammarterm{declaration-seq} + shall not contain an \grammarterm{export-declaration}. + + \alinea + A declaration is \term{exported} if it is + \begin{itemize}\color{addclr} + \item a namespace-scope declaration declared within an + \grammarterm{export-declaration}, or + \item a \grammarterm{module-import-declaration} declared with + the \tcode{export} keyword (\ref{dcl.module.import}), or + \item a \grammarterm{namespace-definition} that contains an + \grammarterm{export-declaration}, or + \item a declaration within a legacy header unit (\ref{dcl.module.import}) + that satisfies the rules for an exported declaration below. + \end{itemize} The \term{interface} of a module \tcode{M} is the set of all - \grammarterm{export-declaration}{s} in its purview. + exported declarations within its purview. + \begin{example} + \begin{codeblock} + export module M; + namespace A { // exported + export int f(); // exported + int g(); // not exported + } + \end{codeblock} + The interface of \tcode{M} comprises \tcode{A} and \tcode{A::f}. + \end{example} + + \alinea + An exported declaration shall declare at least one name. + If the declaration is not within a legacy header unit, + it shall not declare a name with internal linkage. + %\grammarterm{decl-specifier-seq} (if any) of the + %\grammarterm{declaration} shall not contain \tcode{static}, + %and the \grammarterm{declaration} shall not be an + %\grammarterm{unnamed-namespace-definition}. \alinea - In an \grammarterm{export-declaration} of the form - \begin{grammar} - @\tcode{export}@ @\term{declaration}@ - \end{grammar} - the \grammarterm{declaration} - \begin{before}\color{addclr} - shall be a \grammarterm{module-import-declaration}, or it - \end{before} - shall declare at least one name, - and if that declaration declares an entity, the - \grammarterm{decl-specifier-seq} (if any) of the - \grammarterm{declaration} shall not contain \tcode{static}. - The \grammarterm{declaration} shall not be an - \grammarterm{unnamed-namespace-definition} - \begin{before}\color{addclr}or a \grammarterm{proclaimed-ownership-declaration}\end{before}. \begin{example} - \begin{before}\color{addclr} - \begin{codeblock} - export int x; // error: not in the purview of a module interface unit - export module M; - namespace { - export int a; // error: export within unnamed namespace - } - export static int b; // error: b explicitly declared static. - export int f(); // OK - export namespace N { } // OK - export using namespace N; // error: does not declare a name - \end{codeblock} - \end{before}\begin{after}\color{addclr} + \begin{after}\color{addclr} \begin{codeblock} module; export int x; // error: not in the purview of a module interface unit @@ -534,7 +458,7 @@ namespace { export int a; // error: export within unnamed namespace } - export static int b; // error: b explicitly declared static. + export static int b; // error: b explicitly declared static export int f(); // OK export namespace N { } // OK export using namespace N; // error: does not declare a name @@ -542,6 +466,7 @@ \end{after} \end{example} + \alinea If the \grammarterm{declaration} is a \grammarterm{using-declaration} (\ref{namespace.udecl}), any entity to which the \grammarterm{using-declarator} ultimately refers shall have been introduced @@ -560,8 +485,6 @@ export using N::h; // error: \#1 has internal linkage \end{codeblock} \end{example} - - \enternote Names introduced by \tcode{typedef} declarations are not so constrained. \begin{example} @@ -575,9 +498,7 @@ \begin{after}\color{addclr} \alinea - The \grammarterm{declaration} in an \grammarterm{export-declaration} - shall not be a redeclaration of - a non-exported \grammarterm{declaration}. + An exported declaration shall not redeclare a non-exported declaration. \begin{example} \begin{codeblock} export module M; @@ -589,29 +510,32 @@ \end{example} \end{after} - \alinea - An \grammarterm{export-declaration} of the form - \begin{grammar} - @\tcode{export}@ @\tcode{\{} \term{declaration-seq${}_{opt}$} \tcode{\}}@ - \end{grammar} - is equivalent to a sequence of declarations formed by prefixing each - \grammarterm{declaration} of the \grammarterm{declaration-seq} (if any) with - \tcode{export}. +% \alinea +% An \grammarterm{export-declaration} of the form +% \begin{grammar} +% @\tcode{export}@ @\tcode{\{} \term{declaration-seq${}_{opt}$} \tcode{\}}@ +% \end{grammar} +% is equivalent to a sequence of declarations formed by prefixing each +% \grammarterm{declaration} of the \grammarterm{declaration-seq} (if any) with +% \tcode{export}. \alinea - A namespace-scope - \begin{before}\color{addclr} - or a class-scope - \end{before} - declaration lexically - contained in an \grammarterm{export-declaration}, as well as the - entities and the names it introduces are said to be \term{exported}. - \begin{before}\color{addclr} - The exported declarations in the interface of a module are reachable from - any translation unit importing that module. - \end{before} + A name is \term{exported} by a module + if it is introduced or redeclared + by an exported declaration in the purview of that module. + %A namespace-scope + %\begin{before}\color{addclr} + %or a class-scope + %\end{before} + %declaration lexically + %contained in an \grammarterm{export-declaration}, as well as the + %entities and the names it introduces are said to be \term{exported}. + %\begin{before}\color{addclr} + %The exported declarations in the interface of a module are reachable from + %any translation unit importing that module. + %\end{before} \enternote - Exported names have either external linkage or no linkage; see \ref{basic.link} + Exported names have either external linkage or no linkage; see \ref{basic.link}. \begin{after}\color{addclr} Namespace-scope names exported by a module are visible to name lookup in any translation unit importing that module; see \ref{basic.scope.namespace}. @@ -668,12 +592,10 @@ \end{codeblock} \end{example} - - \alinea \enternote Redeclaring a name in an \grammarterm{export-declaration} - cannot change the linkage of the name (10.1.1). + cannot change the linkage of the name (\ref{basic.link}). \begin{example} \begin{codeblock} // Interface unit of M @@ -707,10 +629,12 @@ %% as an exported declaration. \alinea + \enternote Declarations in an exported \grammarterm{namespace-definition} or in an exported \grammarterm{linkage-specification} (10.5) are - implicitly exported and subject to the rules of exported declarations. + exported and subject to the rules of exported declarations. + \exitnote \begin{example} \begin{codeblock} export module M; @@ -743,57 +667,51 @@ \resetalinea[0] \alinea A \grammarterm{module-import-declaration} shall appear only at - global scope, and not in a \grammarterm{linkage-specification} - \begin{before}\color{addclr}or \grammarterm{proclaimed-ownership-declaration}\end{before}. - \begin{after}\color{addclr} + global scope, and not in a \grammarterm{linkage-specification}. In a module unit, a \grammarterm{module-import-declaration} shall appear only within the \grammarterm{preamble}. \alinea - \end{after} - A \grammarterm{module-import-declaration} nominating a module $M$ - \begin{after}\color{addclr} + A \grammarterm{module-import-declaration} \term{imports} a set of + translation units determined as described below. + \enternote + Namespace-scope names exported by the imported translation units + become visible in the importing translation unit (\ref{basic.scope.namespace}) + and declarations within the imported translation units become reachable + in the importing translation unit (\ref{dcl.module.reach}) + after the import declaration. + \exitnote + + \alinea + A \grammarterm{module-import-declaration} that specifies + a \grammarterm{module-name} $M$ imports all module interface units of $M$. - \end{after} - \begin{after}\color{addclr} \alinea - A \grammarterm{module-import-declaration} nominating + A \grammarterm{module-import-declaration} that specifies a \grammarterm{module-partition} shall only appear after the \grammarterm{module-declaration} in a module unit in some module $M$. Such a declaration imports the so-named \grammarterm{module-partition} of $M$. - \color{addclr} \alinea - A \grammarterm{module-import-declaration} nominating - a \grammarterm{header-name} $H$ behaves as if it imports + A \grammarterm{module-import-declaration} that specifies + a \grammarterm{header-name} $H$ imports a synthesized \term{legacy header unit}, - which is a module whose abstract semantics graph - comprises the result of applying + which is a translation unit formed by applying phases 1 to 7 of translation (\stdref{lex.phases}{5.2}) - to the source file nominated by $H$, and - treating all declarations therein as being - exported and attached to the global module. + to the source file nominated by $H$, + which shall not contain a \grammarterm{module-declaration}. \enternote - The legacy header unit for $H$ is equivalent to - \begin{codeblock}\color{addclr} - export module @\textit{unique}@ ; - export extern "C++" { - #include @$H$@ - }\end{codeblock} - where \textit{unique} is a \grammarterm{module-name} - different from every \grammarterm{module-name} - used in the program, - except that the \grammarterm{linkage-specification} cannot be - terminated by an included \tcode{\}} token. + All declarations within a legacy header unit are implicitly + exported, and are attached to the global module. \exitnote Two \grammarterm{module-import-declaration}{s} import the same legacy header unit if and only if their \grammarterm{header-name}{s} identify the same - header or source file. + header or source file (\ref{cpp.include}). \enternote A \grammarterm{module-import-declaration} nominating a \grammarterm{header-name} is also recognized by the @@ -801,119 +719,135 @@ end of phase 4 of translation of the legacy header unit being made visible as described in \ref{cpp.module}. \exitnote - Within a legacy header unit, certain semantic restrictions - are relaxed: - \begin{itemize} - \item A \grammarterm{module-import-declaration} may appear, - and is considered to be exported. - \item A declaration of a name with internal linkage is - permitted despite all declarations being implicitly exported. + A declaration of a name with internal linkage is + permitted within a legacy header unit despite all + declarations being implicitly exported. If such a name is odr-used by a translation unit outside the legacy header unit, or by an instantiation unit for a template instantiation whose point of instantiation is outside the legacy header unit, the program is ill-formed. - \end{itemize} - \end{after} \alinea - \begin{after}\color{addclr} - Importing a translation unit $M$ - \end{after} - makes every citation and every - %\begin{before}\color{addclr} - exported declaration - %\end{before} - %\begin{after}\color{addclr} - %exported name - %\end{after} - from the - abstract semantics graph of $M$ available, as a citation, - %makes exported declarations from the interface of the nominated module visible - to name lookup in - the current translation unit, in the same namespaces and contexts - as in $M$. - % the nominated module. - \begin{after}\color{addclr} - If $M$ is part of the same module as the importing translation unit, - importing $M$ also makes every name declared in the purview of $M$ - that does not have internal linkage visible to name lookup - in the current translation unit, in the same namespaces and contexts - as in $M$. - \end{after} - \begin{before}\color{addclr} - A \term{citation} for a declaration attached to a module $M$ is a pair of - $M$ and the corresponding declset from the abstract semantics graph - of $M$. - \end{before} - \begin{after}\color{addclr} - A \term{citation} for a declaration in a translation unit $M$ is a pair of - $M$ and the corresponding declset from the abstract semantics graph - of $M$. - \end{after} -% The \grammarterm{attribute-specifier-seq} appartain to the nominated module. - \enternote - The declarations in the declsets and the entities denoted by the declsets - are not redeclared in the translation unit - containing the \grammarterm{module-import-declaration}. - \exitnote + When a \grammarterm{module-import-declaration} imports + a translation unit, it also imports + all translation units imported by + exported \grammarterm{module-import-declaration}{s} + in that translation unit. + When a \grammarterm{module-import-declaration} in a module unit imports + another module unit of the same module, it also imports + all translation units imported by + all \grammarterm{module-import-declaration}{s} + in that translation unit. + These rules may in turn lead to the importation of yet more + translation units. - \begin{after}\color{addclr} \alinea - \enternote - A \grammarterm{module-import-declaration} also makes all - declarations in the purview of the module interface units of $M$ - reachable in the current translation unit, and may make declarations - from the preamble of $M$ reachable in the current translation - unit, as described in \ref{dcl.module.reach}. - \exitnote - \end{after} + \color{addclr} + A module implementation unit shall not be exported. \begin{example} \begin{Program} - // Interface unit of M - export module M; - export namespace N { - struct A { }; - } - namespace N { - struct B { }; - export struct C { - friend void f(C) { } // exported, visible only through argument-dependent lookup - }; - } - - // Translation unit 2 - import M; - N::A a { }; // OK. - N::B b { }; // error: `B' not found in N. - void h(N::C c) { - f(c); // OK: `N::f' found via argument-dependent lookup - N::f(c); // error: `f' not found via qualified lookup in N. - } +// Translation unit \#1 +module M:Part; + +// Translation unit \#2 +export module M; +export import :Part; // error: exported partition \tcode{:Part} is an implementation unit \end{Program} \end{example} +% FIXME +% \alinea +% \begin{after}\color{addclr} +% Importing a translation unit $M$ +% \end{after} +% makes every citation and every +% %\begin{before}\color{addclr} +% exported declaration +% %\end{before} +% %\begin{after}\color{addclr} +% %exported name +% %\end{after} +% from the +% abstract semantics graph of $M$ available, as a citation, +% %makes exported declarations from the interface of the nominated module visible +% to name lookup in +% the current translation unit, in the same namespaces and contexts +% as in $M$. +% % the nominated module. +% \begin{after}\color{addclr} +% If $M$ is part of the same module as the importing translation unit, +% importing $M$ also makes every name declared in the purview of $M$ +% that does not have internal linkage visible to name lookup +% in the current translation unit, in the same namespaces and contexts +% as in $M$. +% \end{after} +% \begin{before}\color{addclr} +% A \term{citation} for a declaration attached to a module $M$ is a pair of +% $M$ and the corresponding declset from the abstract semantics graph +% of $M$. +% \end{before} +% \begin{after}\color{addclr} +% A \term{citation} for a declaration in a translation unit $M$ is a pair of +% $M$ and the corresponding declset from the abstract semantics graph +% of $M$. +% \end{after} +%% The \grammarterm{attribute-specifier-seq} appartain to the nominated module. +% \enternote +% The declarations in the declsets and the entities denoted by the declsets +% are not redeclared in the translation unit +% containing the \grammarterm{module-import-declaration}. +% \exitnote + +% FIXME +% \begin{after}\color{addclr} +% \alinea +% \enternote +% A \grammarterm{module-import-declaration} also makes all +% declarations in the purview of the module interface units of $M$ +% reachable in the current translation unit, and may make declarations +% from the preamble of $M$ reachable in the current translation +% unit, as described in \ref{dcl.module.reach}. +% \exitnote +% \end{after} +% \begin{example} +% \begin{Program} +% // Interface unit of M +% export module M; +% export namespace N { +% struct A { }; +% } +% namespace N { +% struct B { }; +% export struct C { +% friend void f(C) { } // exported, visible only through argument-dependent lookup +% }; +% } +% +% // Translation unit 2 +% import M; +% N::A a { }; // OK. +% N::B b { }; // error: `B' not found in N. +% void h(N::C c) { +% f(c); // OK: `N::f' found via argument-dependent lookup +% N::f(c); // error: `f' not found via qualified lookup in N. +% } +% \end{Program} +% \end{example} + \alinea -\begin{before}\color{addclr} - A module \tcode{M1} \term{has a dependency} on a module \tcode{M2} - if any module unit of \tcode{M1} contains a \grammarterm{module-import-declaration} - nominating \tcode{M2}. A module shall not have a dependency on - itself. -\end{before} -\begin{after}\color{addclr} A module implementation unit of a module \tcode{M} that is not a module partition shall not contain a \grammarterm{module-import-declaration} nominating \tcode{M}. -\end{after} \begin{example} \begin{codeblock} module M; - import M; // error: cannot import M in its own unit. + import M; // error: cannot import M in its own unit \end{codeblock} \end{example} - \alinea + \alinea \begin{before}\color{addclr} A module \tcode{M1} \term{has an interface dependency} on a module \tcode{M2} if the module interface of \tcode{M1} contains a @@ -923,9 +857,9 @@ on \tcode{M2}. A module \end{before} \begin{after}\color{addclr} - A translation unit \term{has an interface dependency} on a module unit \tcode{U} in module \tcode{M} - if it is a module implementation unit of \tcode{M} and \tcode{U} is a module interface unit, - or if it contains a \grammarterm{module-import-declaration} nominating \tcode{U}, or if it has + A translation unit \term{has an interface dependency} on a module unit \tcode{U} + if it contains a \grammarterm{module-declaration} or + \grammarterm{module-import-declaration} that imports \tcode{U} or if it has an interface dependency on a module unit that has an interface dependency on \tcode{U}. A translation unit \end{after} @@ -955,40 +889,6 @@ \end{before} \end{std.txt} -\rSec2[dcl.module.export]{Module exportation}% - -\begin{std.txt}\color{addclr} - \resetalinea[0] - \alinea - \begin{after}\color{addclr} - A \grammarterm{module-import-declaration} declared with \tcode{export} - is \term{exported}, and shall only appear after the - \grammarterm{module-declaration} in the \grammarterm{preamble} - of a module interface unit. - \end{after} - An exported - \grammarterm{module-import-declaration} nominating a module \tcode{M2} - in the purview of a module interface unit of a module \tcode{M} - makes all exported names - of \tcode{M2} visible to any translation unit importing \tcode{M}, as if - that translation unit also contains a \grammarterm{module-import-declaration} - nominating \tcode{M2}. - \enternote - A module interface unit (for a module \tcode{M}) containing a non-exported - \grammarterm{module-import-declaration} does not make the imported - names transitively visible to translation units importing the module - \tcode{M}. - \exitnote - % Wording requested by Hubert Tong on December 17, 2017. - In addition to its usual semantics, a - \grammarterm{module-import-declaration} nominating a module $M$ with - a module interface unit containing one or more exported - \grammarterm{module-import-declaration}{s} also behaves as if - it nominates each module nominated by an exported - \grammarterm{module-import-declaration} in $M$; this may in turn - lead it to be considered to nominate yet additional modules. -\end{std.txt} - \begin{before} \rSec2[dcl.module.proclaim]{Proclaimed ownership declaration}% diff --git a/src/lexical.tex b/src/lexical.tex index 21f6ea1..58f0f9b 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -1,5 +1,6 @@ %!TEX root = ts.tex +\setcounter{chapter}{4} \rSec0[lex]{Lexical conventions} \setcounter{section}{0} @@ -447,10 +448,10 @@ even if that would cause further lexical analysis to fail, except that a \grammarterm{header-name} (5.8) is only formed -\added{when the previous preprocessing token +within a \tcode{\#include} directive (19.2) +\added{or when the previous preprocessing token was lexically identical to the -\grammarterm{identifier} \tcode{import}, or} -within a \tcode{\#include} directive (19.2). +\grammarterm{identifier} \tcode{import}.} \end{std.txt} \end{after} From 8c69a043d128c773ef4e191b241b0ea49ab22fff Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 4 Oct 2018 18:46:27 -0700 Subject: [PATCH 21/77] Some xref fixes, and updates to the preprocessing rules. --- src/basic.tex | 2 +- src/declarations.tex | 255 ++++++++++++++++++++++--------------------- src/preprocessor.tex | 104 +++++++----------- 3 files changed, 170 insertions(+), 191 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index b7bf89d..553a384 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -147,7 +147,7 @@ A \grammarterm{module-import-declaration} imports both the named translation unit(s) and any modules named by exported \grammarterm{module-import-declaration}{s} within them, - recursively (\ref{dcl.module.export}). + recursively (\ref{dcl.module.import}). \exitnote} \enterexample \begin{codeblock} diff --git a/src/declarations.tex b/src/declarations.tex index cedcc50..e76eb7d 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -227,7 +227,7 @@ All module partitions of a module that are module interface units shall be directly or indirectly exported -by the primary module interface unit (\ref{dcl.module.export}). +by the primary module interface unit (\ref{dcl.module.import}). No diagnostic is required for a violation of these rules. \enternote Module partitions can only be imported by @@ -468,7 +468,7 @@ \alinea If the \grammarterm{declaration} is a \grammarterm{using-declaration} - (\ref{namespace.udecl}), any entity to which the + (9.8 [namespace.udecl]), any entity to which the \grammarterm{using-declarator} ultimately refers shall have been introduced with a name having external linkage. \begin{example} @@ -730,15 +730,16 @@ \alinea When a \grammarterm{module-import-declaration} imports - a translation unit, it also imports + a translation unit $T$, it also imports all translation units imported by exported \grammarterm{module-import-declaration}{s} - in that translation unit. + in $T$; such translation units are + said to be exported by $T$. When a \grammarterm{module-import-declaration} in a module unit imports another module unit of the same module, it also imports all translation units imported by all \grammarterm{module-import-declaration}{s} - in that translation unit. + in that module unit. These rules may in turn lead to the importation of yet more translation units. @@ -889,69 +890,69 @@ \end{before} \end{std.txt} -\begin{before} -\rSec2[dcl.module.proclaim]{Proclaimed ownership declaration}% - -\begin{std.txt}\color{addclr} - \begin{bnf}\color{addclr} - \nonterminal{proclaimed-ownership-declaration}:\br - \terminal{extern} \terminal{module} module-name \terminal{:} declaration - \end{bnf} - - \resetalinea[0] - \alinea - A \grammarterm{proclaimed-ownership-declaration} shall only appear - at namespace scope. - It shall not appear directly or indirectly within an unnamed namespace. - A \grammarterm{proclaimed-ownership-declaration} has the declarative effects - of its \grammarterm{declaration}. - The \grammarterm{declaration} shall declare at - least one name, and the \grammarterm{decl-specifier-seq} (if any) - of the \grammarterm{declaration} shall not contain \tcode{static}. - The \grammarterm{declaration} shall not be a \grammarterm{namespace-definition}, - an \grammarterm{export-declaration}, - or a \grammarterm{proclaimed-ownership-declaration}. - The \grammarterm{declaration} shall not be a defining declaration - (\ref{basic.def}). - A \grammarterm{proclaimed-ownership-declaration} nominating a module $M$ - shall not appear in the purview of $M$. - - \alinea - A \grammarterm{proclaimed-ownership-declaration} asserts that the entities - introduced by the declaration are exported by the nominated module. - \enternote - A \grammarterm{proclaimed-ownership-declaration} may be used to break - circular dependencies between two modules (in possibly too finely - designed components.) - \begin{example} - \begin{codeblock} - // TU 1 - export module Ty; - extern module Sym: struct Symbol; - export struct Type { - Symbol* decl; - // ... - }; - - // TU 2 - export module Sym; - extern module Ty: struct Type; - export struct Symbol { - const char* name; - const Type* type; - // ... - }; - \end{codeblock} - \end{example} - \exitnote - - \alinea - The program is ill-formed, no diagnostic required, if the - nominated module in the - \grammarterm{proclaimed-ownership-declaration} does not export the entities - introduced by the declaration. -\end{std.txt} -\end{before} +%\begin{before} +%\rSec2[dcl.module.proclaim]{Proclaimed ownership declaration}% +% +%\begin{std.txt}\color{addclr} +% \begin{bnf}\color{addclr} +% \nonterminal{proclaimed-ownership-declaration}:\br +% \terminal{extern} \terminal{module} module-name \terminal{:} declaration +% \end{bnf} +% +% \resetalinea[0] +% \alinea +% A \grammarterm{proclaimed-ownership-declaration} shall only appear +% at namespace scope. +% It shall not appear directly or indirectly within an unnamed namespace. +% A \grammarterm{proclaimed-ownership-declaration} has the declarative effects +% of its \grammarterm{declaration}. +% The \grammarterm{declaration} shall declare at +% least one name, and the \grammarterm{decl-specifier-seq} (if any) +% of the \grammarterm{declaration} shall not contain \tcode{static}. +% The \grammarterm{declaration} shall not be a \grammarterm{namespace-definition}, +% an \grammarterm{export-declaration}, +% or a \grammarterm{proclaimed-ownership-declaration}. +% The \grammarterm{declaration} shall not be a defining declaration +% (\ref{basic.def}). +% A \grammarterm{proclaimed-ownership-declaration} nominating a module $M$ +% shall not appear in the purview of $M$. +% +% \alinea +% A \grammarterm{proclaimed-ownership-declaration} asserts that the entities +% introduced by the declaration are exported by the nominated module. +% \enternote +% A \grammarterm{proclaimed-ownership-declaration} may be used to break +% circular dependencies between two modules (in possibly too finely +% designed components.) +% \begin{example} +% \begin{codeblock} +% // TU 1 +% export module Ty; +% extern module Sym: struct Symbol; +% export struct Type { +% Symbol* decl; +% // ... +% }; +% +% // TU 2 +% export module Sym; +% extern module Ty: struct Type; +% export struct Symbol { +% const char* name; +% const Type* type; +% // ... +% }; +% \end{codeblock} +% \end{example} +% \exitnote +% +% \alinea +% The program is ill-formed, no diagnostic required, if the +% nominated module in the +% \grammarterm{proclaimed-ownership-declaration} does not export the entities +% introduced by the declaration. +%\end{std.txt} +%\end{before} \rSec2[dcl.module.reach]{Reachability} @@ -1008,29 +1009,29 @@ \term{reachable semantic properties} of declset $D$ (or of the entity, if any, denoted by that declset) of the abstract semantic graph of $M$ from $TU$ are -\begin{before}\color{addclr} - \begin{itemize} - \item if $D$ contains at least one exported declaration, - the semantic properties cumulatively obtained in the context - of the exported declaration (\ref{dcl.module.interface}) - members of $D$ in the module interface - unit of $M$. Furthermore, if $D$ denotes an inline function, - the property that the inline function has a definition - (\ref{dcl.fct.spec}) is a reachable semantic property, even - if that definition is not exported. Otherwise, - \item the semantic properties cumulatively obtained in the context of all - declaration members of $D$ in the module interface unit of $M$. - \end{itemize} -% Given a declset $D$ for an exported name from a module $M$, -% the \term{reachable semantic property} of any declaration in that declset -% (or of the entity, if any, designated by that declset) from a translation unit -%% For a given declaration $D$ of a name $X$ exported from a module $M$, the -%% \term{reachable semantic properties} of $D$ from a translation unit -% containing a \grammarterm{module-import-declaration} nominating $M$ are -% restricted to -% the semantic properties cumulatively obtained in -% the context of the exported declaration members of $D$ in $M$. -\end{before} +%%\begin{before}\color{addclr} +%% \begin{itemize} +%% \item if $D$ contains at least one exported declaration, +%% the semantic properties cumulatively obtained in the context +%% of the exported declaration (\ref{dcl.module.interface}) +%% members of $D$ in the module interface +%% unit of $M$. Furthermore, if $D$ denotes an inline function, +%% the property that the inline function has a definition +%% (\ref{dcl.fct.spec}) is a reachable semantic property, even +%% if that definition is not exported. Otherwise, +%% \item the semantic properties cumulatively obtained in the context of all +%% declaration members of $D$ in the module interface unit of $M$. +%% \end{itemize} +%%% Given a declset $D$ for an exported name from a module $M$, +%%% the \term{reachable semantic property} of any declaration in that declset +%%% (or of the entity, if any, designated by that declset) from a translation unit +%%%% For a given declaration $D$ of a name $X$ exported from a module $M$, the +%%%% \term{reachable semantic properties} of $D$ from a translation unit +%%% containing a \grammarterm{module-import-declaration} nominating $M$ are +%%% restricted to +%%% the semantic properties cumulatively obtained in +%%% the context of the exported declaration members of $D$ in $M$. +%%\end{before} \begin{after}\color{addclr} the semantic properties of all reachable declarations in $D$. When the semantic properties of an entity are examined, @@ -1068,42 +1069,42 @@ reachable semantic properties of the corresponding parameter types apply in that context. \begin{example} -\begin{before}\color{addclr} -\begin{codeblock} -// TU 1 -struct F { int f { 42 }; }; -export module M; -export using T = F; -export struct A { int i; }; -export int f(int, A = { 3 }); - -export struct B; // exported as incomplete type -struct B { // definition not exported - operator int(); -}; -export int g(B = B{}); -export int h(int = B{}); // \#1 - -export struct S { - static constexpr int v(int); -}; - -export S j(); // S attendant entity of j() -constexpr int S::v(int x) { return 2 * x; } - - -// TU 2 -import M; -int main() { - T t { }; // OK: reachable semantic properties of T include completeness. - auto x = f(42); // OK: default argument A\{3\} evaluated here. - auto y = h(); // OK: completeness of B only checked at \#1. - auto z = g(); // error: parameter type incomplete here. - constexpr auto a = decltype(j())::v(3); // OK: S::v defined - // in the abstract semantics graph of M (\ref{dcl.fct.spec}) -} -\end{codeblock} -\end{before} +%\begin{before}\color{addclr} +%\begin{codeblock} +%// TU 1 +%struct F { int f { 42 }; }; +%export module M; +%export using T = F; +%export struct A { int i; }; +%export int f(int, A = { 3 }); +% +%export struct B; // exported as incomplete type +%struct B { // definition not exported +% operator int(); +%}; +%export int g(B = B{}); +%export int h(int = B{}); // \#1 +% +%export struct S { +% static constexpr int v(int); +%}; +% +%export S j(); // S attendant entity of j() +%constexpr int S::v(int x) { return 2 * x; } +% +% +%// TU 2 +%import M; +%int main() { +% T t { }; // OK: reachable semantic properties of T include completeness. +% auto x = f(42); // OK: default argument A\{3\} evaluated here. +% auto y = h(); // OK: completeness of B only checked at \#1. +% auto z = g(); // error: parameter type incomplete here. +% constexpr auto a = decltype(j())::v(3); // OK: S::v defined +% // in the abstract semantics graph of M (\ref{dcl.fct.spec}) +%} +%\end{codeblock} +%\end{before} \begin{after}\color{addclr} \begin{codeblock} // TU 1 diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 0c78fdd..d789861 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -1,9 +1,9 @@ %!TEX root = std.tex -\setcounter{chapter}{18} +\setcounter{chapter}{13} \rSec0[cpp]{Preprocessing directives}% \begin{after} -Modify paragraph 19/5 as follows: +Modify paragraph 14/5 as follows: \begin{std.txt} \resetalinea[4] @@ -24,7 +24,7 @@ \rSec1[cpp.include]{Source file inclusion}% \begin{after} -Add a new paragraph after 19.2/6 as follows: +Add a new paragraph after 14.2/6 as follows: \begin{std.txt} \resetalinea[6] @@ -33,9 +33,11 @@ If the header identified by the \grammarterm{header-name} denotes a legacy header unit, the preprocessing directive is instead replaced by the \grammarterm{preprocessing-token}{s} + \begin{bnf} \terminal{import} header-name \terminal{;} \end{bnf} + \color{addclr} How the set of headers denoting legacy header units is specified is implementation-defined. @@ -44,9 +46,35 @@ \begin{after} \noindent -Add a new subclause 19.3 titled ``\textbf{Legacy header units}'' as follows: +Add a new subclause 14.3 titled ``\textbf{Global module fragment}'' as follows: \setcounter{section}{2} +\rSec1[cpp.glob.frag]{Global module fragment}% +\resetalinea[0] + +\begin{std.txt} +\color{addclr} +\begin{bnf} +\nonterminal{pp-global-module-fragment}:\br + \terminal{module} \terminal{;} pp-bracketed-tokens \terminal{module} +\end{bnf} + +\alinea +If the first two preprocessing tokens at the start of phase 4 of translation +are \tcode{module} \tcode{;}, the result of preprocessing shall begin with +a \grammarterm{pp-global-module-fragment} for which all +\grammarterm{preprocessing-token}{s} in the \grammarterm{pp-bracketed-tokens} +were produced directly or indirectly by source file inclusion +(\ref{cpp.include}), and for which the second \tcode{module} +\grammarterm{preprocessing-token} was not produced by source file inclusion or +macro replacement (\stdref{cpp.replace}{14.3}). +Otherwise, the first two preprocessing tokens at the end of phase 4 of +translation shall not be \tcode{module} \tcode{;}. +\end{std.txt} + +Add a new subclause 14.4 titled ``\textbf{Legacy header units}'' as follows: + +\setcounter{section}{3} \rSec1[cpp.module]{Legacy header units}% \resetalinea[0] @@ -54,7 +82,7 @@ \color{addclr} \begin{bnf} \nonterminal{pp-import}:\br - \terminal{export}\opt{} \terminal{import}\opt{} header-name pp-decl-suffix\opt{} \terminal{;} + \terminal{import}\opt{} header-name pp-decl-suffix\opt{} \terminal{;} \end{bnf} \begin{bnf} @@ -86,12 +114,9 @@ instructs the preprocessor to import macros from the legacy header unit (\ref{dcl.module.import}) denoted by the \grammarterm{header-name}. The \tcode{;} \grammarterm{preprocessing-token} shall not be produced by -macro replacement (\stdref{cpp.replace}{19.3}). +macro replacement (\stdref{cpp.replace}{14.3}). The \term{point of macro import} for a \grammarterm{pp-import} is -immediately after the \tcode{;} terminating the preprocessing preamble -(see below) if the import occurs within the preprocessing preamble, and -immediately after the \tcode{;} terminating the \grammarterm{pp-import} -otherwise. +immediately after the \tcode{;} terminating the \grammarterm{pp-import}. \color{addclr} \alinea @@ -150,60 +175,13 @@ pp-preamble \terminal{export}\opt{} \terminal{import} pp-decl-suffix \terminal{;} \end{bnf} -%%% FIXME: Non-modular sources have no preamble. This matches -%%% the Modules TS rule, not the Atom rule. However, this is -%%% necessary to support imports within the global module, -%%% which the Modules TS relies on. -%%% -%%% We should look into a better compromise here. Is there some -%%% way we can distinguish between the Modules TS case and the -%%% Atom case? Maybe we should simply not allow them to be mixed -%%% in the same TU? \alinea -The \term{preprocessing preamble} of a translation unit is -a sequence of \grammarterm{preprocessing-token}{s} -beginning with the first \tcode{module} token that is -neither preceded by \tcode{extern} (\ref{dcl.module.proclaim}) -nor followed by \tcode{;}, -and ending at the last \tcode{;} token such that -the preprocessing preamble forms a \grammarterm{pp-preamble}. -If there is no such \tcode{module} token, -the translation unit has no preprocessing preamble. -Otherwise, if there is no such \grammarterm{pp-preamble} -or if an \tcode{import} \grammarterm{preprocessing-token} -appears after the end of the preprocessing preamble, -the program is ill-formed. -Within the preprocessing preamble, the tokens -\tcode{export} and \tcode{import} -shall not be produced by macro replacement. -\enternote -The preamble always terminates with a semicolon token. -A \tcode{\#if} directive immediately following the end of the preamble -can expand macros imported by a \grammarterm{pp-import} within the -preamble; if that results in encountering additional -\grammarterm{preprocessing-token}{s} matching the syntax of a -\grammarterm{pp-import}, the preamble is not extended to include -those tokens because doing so would not form a valid preprocessing preamble. -\begin{example} -\begin{codeblock} -// macros.h -#define GOT_MACRO 1 - -// TU M -module M; -import "macros.h"; -#if GOT_MACRO -import "other.h"; -#endif -\end{codeblock} -The preprocessing preamble ends at the \tcode{;} of the first \tcode{import}. -As a consequence, the program is ill-formed because \tcode{import "other.h";} -appears after the preprocessing preamble. -The preprocessing preamble cannot extend to include the second \tcode{import}, -because if it did, the macro \tcode{GOT_MACRO} would not be defined in the -context of the \tcode{\#if}. -\end{example} -\exitnote +If an imported macro is replaced (\stdref{cpp.replace}{14.3}) +or is named by a \grammarterm{defined-macro-expression} +outside of a \grammarterm{pp-global-module-fragment}, +there shall be no \grammarterm{pp-import}{s} with a +later point of macro import. + \end{std.txt} \end{after} From f76d6a879b1ceb29c0a73311de8f35657fd65882 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 5 Oct 2018 12:10:51 -0700 Subject: [PATCH 22/77] Consolidate global module fragment wording and rearrange to match Bellevue discussion and direction. --- src/basic.tex | 5 - src/declarations.tex | 417 ++++++++++++++++++++++++++++++++++++++++++- src/lexical.tex | 380 --------------------------------------- 3 files changed, 412 insertions(+), 390 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 553a384..18f69c8 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -361,11 +361,6 @@ \added{preamble\opt} declaration-seq\opt \end{bnf} -\begin{bnf} -\added{\nonterminal{global-module-fragment}:\br - \terminal{module} \terminal{;} declaration-seq} -\end{bnf} - \begin{bnf} \added{\nonterminal{preamble}:\br global-module-fragment\opt module-declaration\br diff --git a/src/declarations.tex b/src/declarations.tex index e76eb7d..5a9bf5e 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -954,21 +954,428 @@ %\end{std.txt} %\end{before} +\rSec2[dcl.module.global]{Global module fragment} + +\begin{std.txt}\color{addclr} +\begin{bnf} +\nonterminal{global-module-fragment}:\br + \terminal{module} \terminal{;} declaration-seq +\end{bnf} + +\resetalinea[0] +\alinea +A \grammarterm{global-module-fragment} specifies the contents of the +\term{global module fragment} for a module unit. +The global module fragment can be used to provide declarations +that are attached to the global module and usable within the module unit. +\enternote +Before preprocessing, only preprocessing directives can appear +in the global module fragment (\ref{cpp.glob.frag}). +\exitnote + +\alinea +Declarations in the global module fragment are \term{discarded} if they +are not referenced by the module unit. A discarded declaration is only +available to name lookup and reachable within the module unit +and template instantiations whose points of instantiation +(\stdref{temp.point}{12.7.4.1}) are within the module, +even when the instantiation context (\ref{dcl.module.context}) +includes the module unit. +\begin{example} +\begin{codeblock} +// header "foo.h" +namespace N { + struct X {}; + int f(X); + int g(X); + int h(X); +} + +// module M interface +module; +#include "foo.h" +export module M; +// \tcode{N::f} is reachable via argument-dependent name lookup result +// in context of template definition +template int use_f() { N::X x; f(x); } +// \tcode{N::g} is not reachable because \tcode{g} is a dependent name +// in context of template definition +template int use_g() { N::X x; g((T(), x)); } +// \tcode{N::h} is reachable because \tcode{use_h} has a point of +// instantiation in the module unit \tcode{M} +template int use_h() { N::X x; h((T(), x)); } +int k = use_h(); + +// module M implementation +module M; +int a = use_f(); // ok +int b = use_g(); // error: no viable function for call to \tcode{g} +int c = use_h(); // ok +\end{codeblock} +\end{example} + +%% Changes: entities now include their declaration context in their basis. +%% We need to retain those contexts so we can mangle the entity. + +\alinea +The \term{basis} of a declaration $D$ is a set of entites determined as follows: +\begin{itemize} +\item If $D$ declares a \grammarterm{typedef-name}, the basis is the +type-basis of the aliased type. + +\item If $D$ declares a variable or function, the basis is the type-basis +of the type of that variable or function and the innermost enclosing +namespace, class, or function. + +\item If $D$ defines a class type, the basis is the union of the +type-bases of its direct base classes (if any), and the bases of +its \grammarterm{member-declaration}{s}, +and the innermost enclosing namespace, class, or function. + +\item If $D$ is a \grammarterm{template-declaration}, +the basis is the union +of the basis of its \grammarterm{declaration}, the set +consisting of the entities (if any) designated by the default +template template arguments and the default non-type template arguments, +the type-bases of the default type template arguments, +and the innermost enclosing namespace, class, or function. +Furthermore, if $D$ declares a partial specialization, +the basis also includes the primary template. + +\item If $D$ is an \grammarterm{explicit-instantiation} +or an \grammarterm{explicit-specialization}, the basis includes +the primary template, and all the entities in the basis of the +\grammarterm{declaration} of $D$. + +\item If $D$ is a \grammarterm{linkage-specification}, the basis is the union +of all the bases of the \grammarterm{declaration}{s} contained in $D$. + +\item If $D$ is a \grammarterm{namespace-definition}, the basis comprises +the innermost enclosing namespace, if any. + +\item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is the +singleton consisting of the namespace denoted by the +\grammarterm{qualified-namespace-specifier}. + +\item If $D$ is a \grammarterm{using-declaration}, the basis is the union +of the bases of all the declarations introduced by +the \grammarterm{using-declarator}. + +\item If $D$ is a \grammarterm{using-directive}, the basis is the +singleton consisting of the norminated namespace. + +\item If $D$ is an \grammarterm{alias-declaration}, the basis is the type-basis of its \grammarterm{defining-type-id}. + +\item Otherwise, the basis is empty. +\end{itemize} + +The \term{type-basis} of a type $T$ is +\begin{itemize} +\item If $T$ is a fundamental type, the type-basis is the empty set. +\item If $T$ is a cv-qualified type, the type-basis is the type-basis of +the unqualified type. +\item If $T$ is a member of an unknown specialization, the type-basis +is the type-basis of that specialization. +\item If $T$ is a class template specialization, the type-basis +is the union of the set consisting of the primary template and the +template template arguments (if any) and the non-dependent non-type +template arguments (if any), and the type-bases of the type +template arguments (if any). +\item If $T$ is a class type or an enumeration type, +the type-basis is the singleton $\{ T \}$. +\item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the +type-basis is the type-basis of $U$. +\item If $T$ is a function type, the type-basis is the union of the +type-basis of the return type and the type-bases of the parameter types. +\item If $T$ is a pointer to data member of a class $X$, the type-basis is +the union of the type-basis of $X$ and the type-basis of member type. +\item If $T$ is a pointer to member function type of a class $X$, the +type-basis is the union of the type-basis of $X$ and the type-basis of +the function type. +\item Otherwise, the type-basis is the empty set. +\end{itemize} + +% \alinea +% The \term{expr-basis} of an expression $E$ is +% \begin{itemize} +% \item If $E$ is a pair of \grammarterm{expression} separated by a comma, +% the expr-basis is the union of the expr-bases of the two operands. + +% \item If $E$ is an assignment, the expr-basis is the union of the +% expr-bases of the left operand and the right operand, and the set consisting +% of the function implementing the assignment operator (if the left operand +% if of class type) and all the functions involved in the implicit conversion +% sequences applied to the operands. + +% \item If $E$ is a \grammarterm{throw-expression}, the expr-basis is the +% expr-basis of its operand. + +% \item If $E$ is a \grammarterm{conditional-expression}, the expr-basis is the +% union of the expr-bases of all the operands, and the set of functions involved +% in the implicit conversion sequences applied to the operands. + +% \item If $E$ is a binary expression, the expr-basis is the union of the +% expr-bases of the two operands, and the set of functions involved in the +% implicit conversion sequences applied to the operands, and the function +% selected by overload resolution (if any) for the operator. + +% \item If $E$ is an explicit type conversion expression, the expr-basis is +% the union of the type-basis of the target type and the expr-basis of +% the operand expression, and the set consisting of the function or constructor +% involved in performing the conversion to the target type (if any). + +% \item If $E$ is a \grammarterm{noexcept-expression}, +% the expr-basis is the expr-basis of the operand. + +% \item If $E$ is an alignof expression, +% the expr-basis is the type-basis of that operand. + +% \item If $E$ is a \grammarterm{delete-expression}, the expr-basis is +% the union of the expr-basis of the operand and the set consisting of +% the functions inolved in the implicit conversion sequence +% applied to the operand, and the deallocation function selected. + +% \item If $E$ is a \grammarterm{new-expression}, the expr-basis is +% the union of +% \begin{itemize} +% \item the expr-bases of the expressions in its +% \grammarterm{new-placement} (if any), and the set of +% functions involved in the implicit conversion sequences applied +% to those expressions (if any), and the allocation function selected +% \item the type-basis of the \grammarterm{type-specifier-seq} contained +% in the \grammarterm{new-type-id}, the expr-bases of the expressions +% contained in the \grammarterm{new-declarator} (if any), and the set +% consisting of the functions involved in the implicit conversion sequences +% applied to those expressions +% \item the expr-bases of the expressions contained in the +% \grammarterm{new-initializer} (if any), and the set consisting of the +% functions involved in the implicit conversion sequences applied +% to those expressions and the constructor selected (if any) +% \end{itemize} + +% \item If $E$ is a sizeof expression, the expr-basis is the expr-basis +% of the operand if the operand is an expression, otherwise the type-basis +% of the operand. + +% \item If $E$ is prefix expression or a postfix expression, the expr-basis +% is the expr-basis of the operand, and the set consisting of the +% operator function selected by overload resolution (if any). + +% \item If $E$ is a pointer to member expression, the expr-basis is the +% set consisting of the designated non-static member. + +% \item If $E$ is any other unary expression, the expr-basis is the +% union of the expr-basis of the operand expression, and the set +% consisting of the operator function (if any) selected by overload +% resolution and any functions involved in the implicit conversion +% sequence applied to the operand expression. + +% \item if $E$ is a \grammarterm{postfix-expression} +% \begin{itemize} +% \item and is a typeid expression, the expr-basis is the +% type-basis of the type operand if the operand is a type, or the +% expr-basis of the expression operand + +% \item and is a cast expression, the expr-basis is the union of the +% the type-basis of the target type, the expr-basis of the expression operand, +% and the set consisting of function or constructor involved in the +% conversion of the expression operand to the target type + +% \item and is a postifx increment or decrement expression, the expr-basis is +% the expr-basis of the operand expression, and the set consisting of the +% operator function (if any) selected by overload resolution + +% \item and is a pseudo destructor call, the expr-basis is the expr-basis +% of the left-hand side of the dot or arrow operator + +% \item and is a class member access expression, the expr-basis is the union +% of the left-hand expression operand of the dot or the arrow operator, +% and (if that left-hand side is not type-dependent) the set consisting of +% the class member designated by the \grammarterm{id-expression}, the +% operator function selected by overload resolution for the member access +% operator + +% \item and is a function call expression, the expr-basis is the union of +% the expr-basis of the \grammarterm{postfix-expression}, the expr-bases +% of the arguments (if any), and the set consisting of the operator function +% implementing the call selected by overload resolution, all the functions +% involved in the implicit conversion sequences applied to each argument +% in the call + +% \item and is a subscripting expression, the expr-basis is the union of +% the expr-basis of the \grammarterm{postfix-expression}, and the expr-bases +% of each expression in the \grammarterm{expr-or-braced-init-list} + +% \item otherwise, the expr-basis is the empty set. +% \end{itemize} + +% \item If $E$ is a primay expression, +% \begin{itemize} +% \item and is a literal, the expr-basis is... +% \item and is an \grammarterm{id-expression}, the expr-basis is the set +% consisting of the designated entity (if it has namespace scope +% or class scope) or the non-static class member; otherwise the class is empty +% \item and is a parentesized expression, the expr-basis is the expr-basis +% of that expression +% \item and is a lambda expression, the expr-basis is the union of +% \begin{itemize} +% \item the type-bases in the parameter types (if any) +% \item the type-basis of the \grammarterm{trailing-return-type} (if any) +% \item the expr-basis of the \grammarterm{initializer}{s} (if any) +% in its \grammarterm{lambda-capture}. +% \end{itemize} +% \end{itemize} + +% \item Otherwise, the expr-basis is the empty set. + +% \end{itemize} + +% The \term{expr-basis} of an expression $E$ is +% \begin{itemize} +% \item If $E$ is a \grammarterm{literal} +% \begin{itemize} +% \item the set consisting of the literal operator function called, if +% $E$ is a \grammarterm{user-defined-literal}; otherwise +% \item the empty set. +% \end{itemize} + +% \item If $E$ is a parenthesized expression, the expr-basis is the expr-basis +% of that expression. + +% \item If $E$ is a \grammarterm{id-expression} +% \begin{itemize} +% \item the set consisting of the designated destructor, +% if $E$ denotes a destructor; otherwise, +% \item the union of the set consisting of the template, the template +% template-arguments (if any), the type-bases of the type +% template-argumnts (if any), the expr-bases of the non-type +% template-arguments (if any), if $E$ is a \grammarterm{template-id}; otherwise, +% \item the set consisting of the namespace scope or class scope entity +% designated by $E$ if $E$ denotes such an entity; otherwise, +% \item the empty set. +% \end{itemize} + +% \item If $E$ is a \grammarterm{lambda-expression}, the union of +% \begin{itemize} +% \item the type-bases in the parameter types (if any) +% \item the type-basis of the \grammarterm{trailing-return-type} (if any) +% \item the expr-basis of the expressions in the +% \grammarterm{initializer}{s} (if any) +% in its \grammarterm{lambda-capture}. +% \end{itemize} + +% \item If $E$ is a \grammarterm{fold-expression}, the union +% of the expr-bases of the operands, and the set of operator functions +% found by name lookup for the \grammarterm{fold-operator}{s} in the +% context of $E$. + +% \item The empty set, if $E$ is any other \grammarterm{primary-expression}. + +% \item If $E$ is a subscripting expression, the union of the expr-basis +% of the \grammarterm{postfix-expression}, the expr-bases of the +% expressions contained in the \grammarterm{expr-or-braced-init-list}, and +% the set consisting of the selected overloaded operator function (if any) +% and all functions involved in the implicit conversion sequences (if any) +% applied to those expressions. + +% \item If $E$ is a function call expression, the union of the expr-basis +% of the \grammarterm{postfix-expression}, the expr-bases of the expressions +% in the argument list, the set consisting of the selected overloaded function +% operator (if any) and the functions involved in the +% implicit conversion sequences (if any) applied to the arguments, +% and the set of functions found by name lookup in the context of $E$ if +% the \grammarterm{postfix-expression} is a dependent name. + +% \item If $E$ is an explicit type conversion using functional notation, +% the union of the type-basis of the target type, the expr-bases of the +% expressions in the \grammarterm{expression-list} or +% \grammarterm{brace-init-list}, the set consisting of the +% constructor selected (if any) and all functions involved in +% the implicit conversion sequences (if any) applied to the arguments. + +% \item If $E$ is a member selection expression, the union of the expr-basis +% of the \grammarterm{postfix-expression} and the set consisting of +% the overloaded function operator (if any) and the entity member (if any) +% designated by the \grammarterm{id-expression}. + +% \item If $E$ is a named cast expression, the union of the type-basis +% of the target type, the expr-basis of the operand expression, the +% set consisting of the function or constructor selected to perform +% the conversion and the function involved in the implicit conversion +% sequence (if any) applied to the operand. + +% \item If $E$ is a post-increment or post-decrement expression, the +% union of the expr-basis of the \grammarterm{postfix-expression}, and the +% set consisting the selected function operator (if any). + +% \item If $E$ is a pseudo destructor call, the expr-basis of +% the \grammartem{postfix-expression}. + +% \item If $E$ is a typeid expression, the expr-basis of the operand if +% that operand is an expression, otherwise the type-basis of that operand. + +% \item The empty set, if $E$ is any other +% \grammarterm{postfix-expression}. + +% \item Otherwise, the empty set. +%\end{itemize} + +\alinea +\enternote +The basis of a declaration includes neither non-fully-evaluated expressions nor +entities used in those expressions. +\begin{example} +\begin{codeblock} +const int size = 2; +int ary1[size]; // \tcode{size} not in \tcode{ary1}'s basis +constexpr int identity(int x) { return x; } +int ary2[identity(2)]; // \tcode{identity} not in \tcode{ary2}'s basis + +template struct S; +template struct S2; +constexpr int g(int); + +template +S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2}, \mathtt{::} \}$ +\end{codeblock} +\end{example} +\exitnote + +\alinea +A declaration from a global module fragment is \term{referenced} +by the enclosing module unit $M$ if it is +\begin{itemize} +\item +the unique result of name lookup for an +\grammarterm{unqualified-id} or \grammarterm{identifier} in $M$ +or in a template instantiation whose point of instantiation is in $M$, or +\item +a function named by an expression (\ref{basic.def.odr}) in $M$ +or in a template instantiation whose point of instantiation is in $M$, or +\item +a lookup result for a dependent name in $M$ (\stdref{temp.dep.res}{12.7.4}) +that is visible at the point of definition of the enclosing template, or +\item +a declaration of an entity that is in the basis of a declaration referenced +by $M$, recursively. +\end{itemize} +\end{std.txt} + +\rSec2[dcl.module.context]{Instantiation context} + \rSec2[dcl.module.reach]{Reachability} \begin{std.txt}\color{addclr} \resetalinea[0] \alinea - When declarations from the abstract semantics graph of a module $M$ - are made available + When declarations from a translation unit $M$ are made available to name lookup in another translation unit $TU$, it is necessary to determine the interpretation of the names they introduce and their semantic properties. \begin{after}\color{addclr} \alinea - A module unit is \term{reachable} from a program point if - it appears in the purview of a module unit - that is directly or indirectly imported prior to that program point (\ref{dcl.module.import}) + A translation unit is \term{reachable} from a program point if + it is directly or indirectly imported prior to that program point (\ref{dcl.module.import}) by a path of \grammarterm{module-declaration}{s}% \footnote{\color{addclr}% diff --git a/src/lexical.tex b/src/lexical.tex index 58f0f9b..20fdf6f 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -55,386 +55,6 @@ \end{itemize} \end{std.txt} -\begin{undecided} -Add new paragraphs as follows: -\begin{std.txt}\color{addclr} - \resetalinea[1] - \alinea - The result of processing a translation unit from phases 1 through 7 - is a directed graph called the \term{abstract semantics graph} of - the translation unit: - \begin{itemize} - \item Each vertex, called a \term{declset}, is - a citation (\ref{dcl.module.import}), or a collection of - non-local declarations and redeclarations (Clause \ref{dcl.dcl}) - declaring the same entity or other non-local declarations - of the same name that do not declare an entity. - \item A directed edge $(D_1, D_2)$ exists in the graph if and only if the - declarations contained in $D_2$ declare an entity mentioned - in a declaration contained in $D_1$. - \end{itemize} - The \term{abstract semantics graph of a module} is - \begin{before}\color{addclr} - the subgraph of - the abstract semantics graph of its module interface unit generated - by the declsets the declarations of which are - in the purview of that module interface unit. - \end{before} - \begin{after}\color{addclr} - the subgraph of - the abstract semantics graph of its module interface units generated - by the declsets the declarations of which are - in the purview of those module interface units. - \end{after} - \enternote - The abstract semantics graphs of modules, - as appropriately restricted (\ref{dcl.module.reach}), are used in - the processing of \grammarterm{module-import-declaration}{s} - (\ref{dcl.module.import}) and module implementation units. - \exitnote - - \alinea - An entity is \term{mentioned} in a declaration $D$ if that entity is a member of the - \term{basis} of $D$, a set of entities determined as follows: - \begin{itemize} - \item If $D$ is a \grammarterm{namespace-definition}, the basis is the union - of the bases of the \grammarterm{declaration}{s} in its - \grammarterm{namespace-body}. - - \item If $D$ is a \grammarterm{nodeclspec-function-declaration}, - \begin{itemize} - \item if $D$ declares a contructor, the basis is - the union of the type-bases of the parameter types - - \item if $D$ declares a conversion function, the basis is - the type-basis of the return type - - \item otherwise, the basis is empty. - \end{itemize} - - \item If $D$ is a \grammarterm{function-definition}, the basis is - the type-basis of the function's type - - \item If $D$ is a \grammarterm{simple-declaration} - \begin{itemize} - \item if $D$ declares a \grammarterm{typedef-name}, the basis is the - type-basis of the aliased type - \item if $D$ declares a variable, the basis is the type-basis - of the type of that variable - \item if $D$ declares a function, the basis is the type-basis of the type of that function - \item if $D$ defines a class type, the basis is the union of the - type-bases of its direct base classes (if any), and the bases of - its \grammarterm{member-declaration}{s}. - \item otherwise, the basis is the empty set. - \end{itemize} - - \item If $D$ is a \grammarterm{template-declaration}, the basis is the union - of the basis of its \grammarterm{declaration}, the set - consisting of the entities (if any) designated by the default - template template arguments, the default non-type template arguments, the - type-bases of the default type template arguments. - Furthermore, if $D$ declares a - partial specialization, the basis also includes the primary template. - - \item If $D$ is an \grammarterm{explicit-instantiation} - or an \grammarterm{explicit-specialization}, the basis includes - the primary template, and all the entities in the basis of the - \grammarterm{declaration} of $D$. - - \item If $D$ is a \grammarterm{linkage-specification}, the basis is the union - of all the bases of the \grammarterm{declaration}{s} contained in $D$. - - \item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is the - singleton consisting of the namespace denoted by the - \grammarterm{qualified-namespace-specifier}. - - \item If $D$ is a \grammarterm{using-declaration}, the basis is the union - of the bases of all the declarations introduced by - the \grammarterm{using-declarator}. - - \item If $D$ is a \grammarterm{using-directive}, the basis is the - singleton consisting of the norminated namespace. - - \item If $D$ is an \grammarterm{alias-declaration}, the basis is the type-basis of - its \grammarterm{defining-type-id}. - - \item Otherwise, the basis is empty. - \end{itemize} - - The \term{type-basis} of a type $T$ is - \begin{itemize} - \item If $T$ is a fundamental type, the type-basis is the empty set. - \item If $T$ is a cv-qualified type, the type-basis is the type-basis of - the unqualified type. - \item If $T$ is a member of an unknown specialization, the type-basis - is the type-basis of that specialization. - \item If $T$ is a class template specialization, the type-basis - is the union of the set consisting of the primary template and the - template template arguments (if any) and the non-dependent non-type - template arguments (if any), and the type-bases of the type - template arguments (if any). - \item If $T$ is a class type or an enumeration type, - the type-basis is the singleton $\{ T \}$. - \item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the - type-basis is the type-basis of $U$. - \item If $T$ is a function type, the type-basis is the union of the - type-basis of the return type and the type-bases of the parameter types. - \item If $T$ is a pointer to data member of a class $X$, the type-basis is - the union of the type-basis of $X$ and the type-basis of member type. - \item If $T$ is a pointer to member function type of a class $X$, the - type-basis is the union of the type-basis of $X$ and the type-basis of - the function type. - \item Otherwise, the type-basis is the empty set. - \end{itemize} - -% The \term{expr-basis} of an expression $E$ is -% \begin{itemize} -% \item If $E$ is a pair of \grammarterm{expression} separated by a comma, -% the expr-basis is the union of the expr-bases of the two operands. - -% \item If $E$ is an assignment, the expr-basis is the union of the -% expr-bases of the left operand and the right operand, and the set consisting -% of the function implementing the assignment operator (if the left operand -% if of class type) and all the functions involved in the implicit conversion -% sequences applied to the operands. - -% \item If $E$ is a \grammarterm{throw-expression}, the expr-basis is the -% expr-basis of its operand. - -% \item If $E$ is a \grammarterm{conditional-expression}, the expr-basis is the -% union of the expr-bases of all the operands, and the set of functions involved -% in the implicit conversion sequences applied to the operands. - -% \item If $E$ is a binary expression, the expr-basis is the union of the -% expr-bases of the two operands, and the set of functions involved in the -% implicit conversion sequences applied to the operands, and the function -% selected by overload resolution (if any) for the operator. - -% \item If $E$ is an explicit type conversion expression, the expr-basis is -% the union of the type-basis of the target type and the expr-basis of -% the operand expression, and the set consisting of the function or constructor -% involved in performing the conversion to the target type (if any). - -% \item If $E$ is a \grammarterm{noexcept-expression}, -% the expr-basis is the expr-basis of the operand. - -% \item If $E$ is an alignof expression, -% the expr-basis is the type-basis of that operand. - -% \item If $E$ is a \grammarterm{delete-expression}, the expr-basis is -% the union of the expr-basis of the operand and the set consisting of -% the functions inolved in the implicit conversion sequence -% applied to the operand, and the deallocation function selected. - -% \item If $E$ is a \grammarterm{new-expression}, the expr-basis is -% the union of -% \begin{itemize} -% \item the expr-bases of the expressions in its -% \grammarterm{new-placement} (if any), and the set of -% functions involved in the implicit conversion sequences applied -% to those expressions (if any), and the allocation function selected -% \item the type-basis of the \grammarterm{type-specifier-seq} contained -% in the \grammarterm{new-type-id}, the expr-bases of the expressions -% contained in the \grammarterm{new-declarator} (if any), and the set -% consisting of the functions involved in the implicit conversion sequences -% applied to those expressions -% \item the expr-bases of the expressions contained in the -% \grammarterm{new-initializer} (if any), and the set consisting of the -% functions involved in the implicit conversion sequences applied -% to those expressions and the constructor selected (if any) -% \end{itemize} - -% \item If $E$ is a sizeof expression, the expr-basis is the expr-basis -% of the operand if the operand is an expression, otherwise the type-basis -% of the operand. - -% \item If $E$ is prefix expression or a postfix expression, the expr-basis -% is the expr-basis of the operand, and the set consisting of the -% operator function selected by overload resolution (if any). - -% \item If $E$ is a pointer to member expression, the expr-basis is the -% set consisting of the designated non-static member. - -% \item If $E$ is any other unary expression, the expr-basis is the -% union of the expr-basis of the operand expression, and the set -% consisting of the operator function (if any) selected by overload -% resolution and any functions involved in the implicit conversion -% sequence applied to the operand expression. - -% \item if $E$ is a \grammarterm{postfix-expression} -% \begin{itemize} -% \item and is a typeid expression, the expr-basis is the -% type-basis of the type operand if the operand is a type, or the -% expr-basis of the expression operand - -% \item and is a cast expression, the expr-basis is the union of the -% the type-basis of the target type, the expr-basis of the expression operand, -% and the set consisting of function or constructor involved in the -% conversion of the expression operand to the target type - -% \item and is a postifx increment or decrement expression, the expr-basis is -% the expr-basis of the operand expression, and the set consisting of the -% operator function (if any) selected by overload resolution - -% \item and is a pseudo destructor call, the expr-basis is the expr-basis -% of the left-hand side of the dot or arrow operator - -% \item and is a class member access expression, the expr-basis is the union -% of the left-hand expression operand of the dot or the arrow operator, -% and (if that left-hand side is not type-dependent) the set consisting of -% the class member designated by the \grammarterm{id-expression}, the -% operator function selected by overload resolution for the member access -% operator - -% \item and is a function call expression, the expr-basis is the union of -% the expr-basis of the \grammarterm{postfix-expression}, the expr-bases -% of the arguments (if any), and the set consisting of the operator function -% implementing the call selected by overload resolution, all the functions -% involved in the implicit conversion sequences applied to each argument -% in the call - -% \item and is a subscripting expression, the expr-basis is the union of -% the expr-basis of the \grammarterm{postfix-expression}, and the expr-bases -% of each expression in the \grammarterm{expr-or-braced-init-list} - -% \item otherwise, the expr-basis is the empty set. -% \end{itemize} - -% \item If $E$ is a primay expression, -% \begin{itemize} -% \item and is a literal, the expr-basis is... -% \item and is an \grammarterm{id-expression}, the expr-basis is the set -% consisting of the designated entity (if it has namespace scope -% or class scope) or the non-static class member; otherwise the class is empty -% \item and is a parentesized expression, the expr-basis is the expr-basis -% of that expression -% \item and is a lambda expression, the expr-basis is the union of -% \begin{itemize} -% \item the type-bases in the parameter types (if any) -% \item the type-basis of the \grammarterm{trailing-return-type} (if any) -% \item the expr-basis of the \grammarterm{initializer}{s} (if any) -% in its \grammarterm{lambda-capture}. -% \end{itemize} -% \end{itemize} - -% \item Otherwise, the expr-basis is the empty set. - -% \end{itemize} - -% The \term{expr-basis} of an expression $E$ is -% \begin{itemize} -% \item If $E$ is a \grammarterm{literal} -% \begin{itemize} -% \item the set consisting of the literal operator function called, if -% $E$ is a \grammarterm{user-defined-literal}; otherwise -% \item the empty set. -% \end{itemize} - -% \item If $E$ is a parenthesized expression, the expr-basis is the expr-basis -% of that expression. - -% \item If $E$ is a \grammarterm{id-expression} -% \begin{itemize} -% \item the set consisting of the designated destructor, -% if $E$ denotes a destructor; otherwise, -% \item the union of the set consisting of the template, the template -% template-arguments (if any), the type-bases of the type -% template-argumnts (if any), the expr-bases of the non-type -% template-arguments (if any), if $E$ is a \grammarterm{template-id}; otherwise, -% \item the set consisting of the namespace scope or class scope entity -% designated by $E$ if $E$ denotes such an entity; otherwise, -% \item the empty set. -% \end{itemize} - -% \item If $E$ is a \grammarterm{lambda-expression}, the union of -% \begin{itemize} -% \item the type-bases in the parameter types (if any) -% \item the type-basis of the \grammarterm{trailing-return-type} (if any) -% \item the expr-basis of the expressions in the -% \grammarterm{initializer}{s} (if any) -% in its \grammarterm{lambda-capture}. -% \end{itemize} - -% \item If $E$ is a \grammarterm{fold-expression}, the union -% of the expr-bases of the operands, and the set of operator functions -% found by name lookup for the \grammarterm{fold-operator}{s} in the -% context of $E$. - -% \item The empty set, if $E$ is any other \grammarterm{primary-expression}. - -% \item If $E$ is a subscripting expression, the union of the expr-basis -% of the \grammarterm{postfix-expression}, the expr-bases of the -% expressions contained in the \grammarterm{expr-or-braced-init-list}, and -% the set consisting of the selected overloaded operator function (if any) -% and all functions involved in the implicit conversion sequences (if any) -% applied to those expressions. - -% \item If $E$ is a function call expression, the union of the expr-basis -% of the \grammarterm{postfix-expression}, the expr-bases of the expressions -% in the argument list, the set consisting of the selected overloaded function -% operator (if any) and the functions involved in the -% implicit conversion sequences (if any) applied to the arguments, -% and the set of functions found by name lookup in the context of $E$ if -% the \grammarterm{postfix-expression} is a dependent name. - -% \item If $E$ is an explicit type conversion using functional notation, -% the union of the type-basis of the target type, the expr-bases of the -% expressions in the \grammarterm{expression-list} or -% \grammarterm{brace-init-list}, the set consisting of the -% constructor selected (if any) and all functions involved in -% the implicit conversion sequences (if any) applied to the arguments. - -% \item If $E$ is a member selection expression, the union of the expr-basis -% of the \grammarterm{postfix-expression} and the set consisting of -% the overloaded function operator (if any) and the entity member (if any) -% designated by the \grammarterm{id-expression}. - -% \item If $E$ is a named cast expression, the union of the type-basis -% of the target type, the expr-basis of the operand expression, the -% set consisting of the function or constructor selected to perform -% the conversion and the function involved in the implicit conversion -% sequence (if any) applied to the operand. - -% \item If $E$ is a post-increment or post-decrement expression, the -% union of the expr-basis of the \grammarterm{postfix-expression}, and the -% set consisting the selected function operator (if any). - -% \item If $E$ is a pseudo destructor call, the expr-basis of -% the \grammartem{postfix-expression}. - -% \item If $E$ is a typeid expression, the expr-basis of the operand if -% that operand is an expression, otherwise the type-basis of that operand. - -% \item The empty set, if $E$ is any other -% \grammarterm{postfix-expression}. - -% \item Otherwise, the empty set. -%\end{itemize} - -\alinea -\enternote -The basis of a declaration includes neither non-fully evaluated expressions nor -entities used in those expressions. -\begin{example} - \begin{codeblock} - const int size = 2; - int ary1[size]; // \tcode{size} not in \tcode{ary1}'s basis - constexpr int identity(int x) { return x; } - int ary2[identity(2)]; // \tcode{identity} not in \tcode{ary2}'s basis - - template struct S; - template struct S2; - constexpr int g(int); - - template - S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2} \}$ - \end{codeblock} -\end{example} -\exitnote - -\end{std.txt} -\end{undecided} - \begin{after} \setcounter{section}{3} \Sec1[lex.pptoken]{Preprocessing tokens} From 9e8a60a6af88fef89dcd9c8145ebff08b56b3b6b Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 5 Oct 2018 14:58:25 -0700 Subject: [PATCH 23/77] Reachability and instantiation context / path of instantiation. --- src/basic.tex | 2 +- src/declarations.tex | 353 ++++++++++++++++++++------------------ src/overloading.tex | 4 +- src/templates.tex | 398 +++++++++++++++++++------------------------ 4 files changed, 358 insertions(+), 399 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 18f69c8..ad5b549 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -321,7 +321,7 @@ even if it is not visible during an ordinary lookup.} \item[---] - \added{All declarations that are visible in the instantiation + \added{All declarations that are visible at any point in the instantiation context (\ref{dcl.module.context}) of the lookup are visible even if they are not visible during an ordinary lookup, excluding internal linkage declarations attached to the global module.} diff --git a/src/declarations.tex b/src/declarations.tex index 5a9bf5e..142fb0b 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -1363,197 +1363,210 @@ \rSec2[dcl.module.context]{Instantiation context} -\rSec2[dcl.module.reach]{Reachability} - \begin{std.txt}\color{addclr} - \resetalinea[0] - \alinea - When declarations from a translation unit $M$ are made available - to name lookup in another translation unit $TU$, it is necessary to - determine the interpretation of the names they introduce and their - semantic properties. -\begin{after}\color{addclr} - \alinea - A translation unit is \term{reachable} from a program point if - it is directly or indirectly imported prior to that program point (\ref{dcl.module.import}) - by a path of - \grammarterm{module-declaration}{s}% - \footnote{\color{addclr}% - A \grammarterm{module-declaration} containing neither \tcode{export} - nor a \grammarterm{module-partition} is considered to import the named module.} - and - \grammarterm{import-declaration}{s}, - for which all declarations other than the first - are either exported or - appear within the same module as the program point. - A declaration is \term{reachable} from a program point if - \begin{itemize}\color{addclr} - \item it appears prior to that program point in the same translation unit, or - \item it appears in the purview of a reachable module unit and either - \begin{itemize} - \item the declaration is exported, or - \item the declaration is not exported and is not a redeclaration of - an exported entity, or - \item the declaration appears in the same module as the program point, - \end{itemize} - or - \item it appears in the preamble of a reachable module unit, - and there is a path from an exported declaration to it - in the abstract semantics graph of that module unit. - \end{itemize} - A declaration is considered to appear in the same module as a program point - if the program point is in the purview of a module and - the declaration appears within a module unit of that module. -\end{after} +\resetalinea[0] +\alinea +The \term{instantiation context} is a set of locations within the program +that determines which names are visible to argument-dependent name lookup +(\ref{basic.lookup.argdep}) +and which declarations are reachable (\ref{dcl.module.reach}) +in the context of a particular declaration or template instantiation. +The instantiation context depends on how the declaration was formed, +or where the template instantiation was referenced. - \alinea -\begin{before}\color{addclr} - Except as noted below, the -\end{before} -\begin{after}\color{addclr} -The -\end{after} - \term{reachable semantic properties} of declset $D$ - (or of the entity, if any, denoted by that declset) - of the abstract semantic graph of $M$ from $TU$ are -%%\begin{before}\color{addclr} -%% \begin{itemize} -%% \item if $D$ contains at least one exported declaration, -%% the semantic properties cumulatively obtained in the context -%% of the exported declaration (\ref{dcl.module.interface}) -%% members of $D$ in the module interface -%% unit of $M$. Furthermore, if $D$ denotes an inline function, -%% the property that the inline function has a definition -%% (\ref{dcl.fct.spec}) is a reachable semantic property, even -%% if that definition is not exported. Otherwise, -%% \item the semantic properties cumulatively obtained in the context of all -%% declaration members of $D$ in the module interface unit of $M$. -%% \end{itemize} -%%% Given a declset $D$ for an exported name from a module $M$, -%%% the \term{reachable semantic property} of any declaration in that declset -%%% (or of the entity, if any, designated by that declset) from a translation unit -%%%% For a given declaration $D$ of a name $X$ exported from a module $M$, the -%%%% \term{reachable semantic properties} of $D$ from a translation unit -%%% containing a \grammarterm{module-import-declaration} nominating $M$ are -%%% restricted to -%%% the semantic properties cumulatively obtained in -%%% the context of the exported declaration members of $D$ in $M$. -%%\end{before} -\begin{after}\color{addclr} - the semantic properties of all reachable declarations in $D$. - When the semantic properties of an entity are examined, - all properties that are reachable from - the point of inquiry are found, - even if the declaration introducing the property - is not visible to unqualified lookup. +\alinea +During the implicit definition of a defaulted special member function +(\stdref{special}{10.2.3}), +the instantiation context is the union of +the instantiation context of the definition of the class and +the instantiation context of the program construct that +resulted in the implicit definition of the special member function. + +\alinea +During the implicit instantiation of a template +whose point of instantiation is specified as +that of an enclosing specialization (\stdref{temp.point}{12.7.4.1}), +the instantiation context is the union of +the instantiation context of the enclosing specialization and, +if the template is defined in a module interface unit of a module $M$ +and the point of instantiation is not in a module interface unit of $M$, +the point at the end of the primary module interface unit of $M$. + +\alinea +During the implicit instantiation of a template +that is implicitly instantiated because it is referenced +from within the implicit definition of a defaulted special member function, +the instantiation context is the instantiation context of +the defaulted special member function. + +\alinea +During the instantiation of any other template specialization, +the instantiation context comprises the point of instantiation +of the template. + +\alinea +In any other case, the instantiation context at a program point comprises +that program point. + +\alinea \begin{example} \begin{codeblock} -module; -struct X {}; -export module A; -export using Y = X; +// translation unit \#1 +export module stuff; +export template void foo(T, U u) { auto v = u; } +export template void bar(T, U u) { auto v = *u; } + +// translation unit \#2 +export module M1; +import "defn.h"; // provides \tcode{struct X \{\};} +import stuff; +export template void f(T t) { + X x; + foo(t, x); +} -module B; -import A; -Y y; // OK, definition of \tcode{X} is reachable -X x; // ill-formed: \tcode{X} not visible to unqualified lookup +// translation unit \#3 +export module M2; +import "decl.h"; // provides \tcode{struct X;} (not a definition) +import stuff; +export template void g(T t) { + X *x; + bar(t, x); +} + +// translation unit \#4 +import M1; +import M2; +void test() { + // OK: the instantiation context of \tcode{foo} comprises + // the point at the end of translation unit \#1, + // the point at the end of translation unit \#2, and + // the point of the call to \tcode{f(0)} below, so + // the definition of \tcode{X} is reachable (\ref{dcl.module.reach}) + f(0); + + // the instantiation context of \tcode{foo} comprises + // the point at the end of translation unit \#1, + // the point at the end of translation unit \#3, and + // the point of the call to \tcode{g(0)} below, so + // the definition of \tcode{X} is not necessarily reachable + g(0); +} \end{codeblock} \end{example} +\end{std.txt} +\rSec2[dcl.module.reach]{Reachability} + +\begin{std.txt}\color{addclr} +\resetalinea[0] \alinea -\end{after} - \enternote - These reachable semantic properties include type completeness, - type definitions, initializers, - default arguments of functions or template declarations, attributes, - visibility to normal lookup, -\begin{before}\color{addclr} - entities that are direct targets of edges - emanating from $D$ in the abstract semantics graph of $M$, -\end{before} - etc. - Since default arguments are evaluated in the context of the call expression, - reachable semantic properties of the corresponding parameter types apply in - that context. - \begin{example} -%\begin{before}\color{addclr} -%\begin{codeblock} -%// TU 1 -%struct F { int f { 42 }; }; -%export module M; -%export using T = F; -%export struct A { int i; }; -%export int f(int, A = { 3 }); -% -%export struct B; // exported as incomplete type -%struct B { // definition not exported -% operator int(); -%}; -%export int g(B = B{}); -%export int h(int = B{}); // \#1 -% -%export struct S { -% static constexpr int v(int); -%}; -% -%export S j(); // S attendant entity of j() -%constexpr int S::v(int x) { return 2 * x; } -% -% -%// TU 2 -%import M; -%int main() { -% T t { }; // OK: reachable semantic properties of T include completeness. -% auto x = f(42); // OK: default argument A\{3\} evaluated here. -% auto y = h(); // OK: completeness of B only checked at \#1. -% auto z = g(); // error: parameter type incomplete here. -% constexpr auto a = decltype(j())::v(3); // OK: S::v defined -% // in the abstract semantics graph of M (\ref{dcl.fct.spec}) -%} -%\end{codeblock} -%\end{before} -\begin{after}\color{addclr} +A translation unit is \term{reachable} from a program point if +it is a module interface unit on which the translation unit containing the +program point has an interface dependency, or +it is a translation unit that the translation unit containing the +program point directly or indirectly imports, +prior to that program point (\ref{dcl.module.import}). +\enternote +While module interface units are reachable even when they are only +transitively imported via a non-exported import declaration, +namespace-scope names from such module interface units are not visible +to name lookup (\ref{basic.scope.namespace}). +\exitnote + +\alinea +It is unspecified whether additional translation units on which the +program point has an interface dependency are considered reachable, +and under what circumstances.% +\footnote{Implementations are not required to prevent the semantic effects of +additional translation units involved in the compilation from being +observed.} +Programs intended to be portable should avoid +depending on the reachability of any additional translation units. + +\alinea +A declaration is \term{reachable} if, for any program point in the +instantiation context (\ref{dcl.module.context}), +\begin{itemize} +\item it appears prior to that program point in the same translation unit, or +\item it is not discarded (\ref{dcl.module.global}) and +appears in a translation unit that is reachable from that program point. +\end{itemize} +\enternote +Whether a declaration is exported has no bearing on whether it is reachable. +\exitnote + +\alinea +The \term{reachable semantic properties} of an entity within a context +are the accumulated properties of all reachable declarations of +that entity, and determine the behavior of the entity within +that context. +\enternote +These reachable semantic properties include type completeness, +type definitions, initializers, +default arguments of functions or template declarations, attributes, +visibility of class or enumeration member names to ordinary lookup, +etc. +Since default arguments are evaluated in the context of the call expression, +the reachable semantic properties of the corresponding parameter types apply in +that context. +\begin{example} \begin{codeblock} -// TU 1 +// translation unit \#1 +export module M:A; +export struct B; + +// translation unit \#2 module M:B; -struct B { // definition not exported +struct B { operator int(); }; -// TU 2 -module; -struct F { int f { 42 }; }; +// translation unit \#3 +module M:C; +import :A; +B b1; // error: no reachable definition of \tcode{struct B} + +// translation unit \#4 export module M; +export import :A; import :B; -export using T = F; // earlier definition of F now reachable -export struct A { int i; }; -export int f(int, A = { 3 }); +B b2; -export struct B; // exported as incomplete type -export int g(B = B{}); -export int h(int = B{}); // \#1 +// translation unit \#5 +module X; +import M; +B b3; // error: no reachable definition of \tcode{struct B} +\end{codeblock} +\end{example} +\exitnote -export struct S { - static constexpr int v(int); -}; +\alinea +\enternote +The reachable semantic properties for an entity attached to a module $M$ +are the same for all contexts outside that module in which the entity +can be referenced, irrespective of whether $M$ is directly or indirectly +imported. +\exitnote -export S j(); -constexpr int S::v(int x) { return 2 * x; } +\alinea +\enternote +An entity can have reachable declarations and therefore +reachable semantic properties even if it is not visible +to name lookup. +\exitnote +\begin{example} +\begin{codeblock} +export module A; +struct X {}; +export using Y = X; -// TU 2 -import M; -int main() { - T t { }; // OK: reachable semantic properties of T include completeness - auto x = f(42); // OK: default argument A\{3\} evaluated here - auto y = h(); // OK: completeness of B only checked at \#1 - auto z = g(); // error: parameter type incomplete here - constexpr auto a = decltype(j())::v(3); // OK: S::v defined - // in the abstract semantics graph of M (\ref{dcl.fct.spec}) -} +module B; +import A; +Y y; // OK, definition of \tcode{X} is reachable +X x; // ill-formed: \tcode{X} not visible to unqualified lookup \end{codeblock} -\end{after} - \end{example} - \exitnote +\end{example} \begin{before}\color{addclr} \alinea diff --git a/src/overloading.tex b/src/overloading.tex index 340c63a..53d6e9d 100644 --- a/src/overloading.tex +++ b/src/overloading.tex @@ -1,6 +1,6 @@ %!TEX root = ts.tex -\setcounter{chapter}{15} +\setcounter{chapter}{10} \rSec0[over]{Overloading} \setcounter{section}{4} @@ -10,7 +10,7 @@ \rSec2[over.literal]{User-defined literals} \noindent -Modify paragraph 16.5.8/7 as follows: +Modify paragraph 11.5.8/7 as follows: \begin{std.txt} \resetalinea[6] \alinea diff --git a/src/templates.tex b/src/templates.tex index c3e841b..cf5071c 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -1,19 +1,17 @@ %!TEX root = std.tex -\setcounter{chapter}{16} +\setcounter{chapter}{11} \rSec0[temp]{Templates}% %\indextext{template|(} \noindent -Modify paragraph 17/2 as follows: +Modify paragraph 11/2 as follows: \begin{std.txt} \resetalinea[1] \alinea A \grammarterm{template-declaration} can appear only as a namespace scope or class scope declaration. \added{Its \grammarterm{declaration} shall not be an - \grammarterm{export-declaration}} - \begin{before}\added{or a \grammarterm{proclaimed-ownership-declaration}}\end{before} - \added{.} + \grammarterm{export-declaration}.} In a function template declaration, the last component of the \grammarterm{declarator-id} shall not be a \grammarterm{template-id}. \end{std.txt} @@ -41,244 +39,192 @@ \setcounter{subsection}{3} \rSec2[temp.dep.res]{Dependent name resolution} -Add new example to paragraph 17.6.4/1: +Change in 12.7.4/1: + \begin{std.txt} - \begin{addedblock} - \enterexample - \begin{codeblock} - // Header file X.h - namespace Q { - struct X { }; - } - - // Interface unit of M1 - @\begin{after}\color{addclr} - module; - \end{after}@ - #include "X.h" // global module - namespace Q { - void g_impl(X, X); - } - export module M1; - export template - void g(T t) { - g_impl(t, Q::X{ }); // \#1: ADL in definition context finds Q::g_impl - } - - // Interface unit of M2 - @\begin{after}\color{addclr} - module; - \end{after}@ - #include "X.h" - import M1; - export module M2; - void h(Q::X x) { - g(x); // OK - } - \end{codeblock} - \exitexample -\end{addedblock} +\resetalinea[0] +\alinea +In resolving dependent names, names from the following sources are considered: +\begin{itemize} +\item +Declarations that are visible at the point of definition of the template. +\item +Declarations from namespaces associated with the types of the function +arguments both from the instantiation context +\removed{(12.7.4.1)} \added{(\ref{dcl.module.context})} +and from the definition context. +\end{itemize} +\enterexample\color{addclr} +\begin{codeblock} +// header file \tcode{"X.h"} +namespace Q { + struct X { }; +} + +// header file \tcode{"G.h"} +namespace Q { + void g_impl(X, X); +} + +// interface unit of \tcode{M1} +module; +#include "X.h" +#include "G.h" +export module M1; +export template +void g(T t) { + g_impl(t, Q::X{ }); // ADL in definition context finds \tcode{Q::g_impl}, \tcode{g_impl} not discarded +} + +// interface unit of \tcode{M2} +module; +#include "X.h" +export module M2; +import M1; +void h(Q::X x) { + g(x); // OK +} +\end{codeblock} +\exitexample \end{std.txt} - \noindent -Add new paragraphs to 17.6.4: +Add new paragraphs to 12.7.4: \begin{std.txt} - \color{addclr} - \resetalinea[1] - \alinea - \enterexample - \begin{codeblock} - // Interface unit of Std - export module Std; - export template - void indirect_swap(Iter lhs, Iter rhs) - { - swap(*lhs, *rhs); // swap can be found only via ADL - } - - // Interface unit of M - @\begin{after}\color{addclr} - module; - \end{after}@ - import Std; - export module M; - - struct S { /* ...*/ }; - void swap(S&, S&); // \#1; - - void f(S* p, S* q) - { - indirect_swap(p, q); // instantiation finds \#1 via ADL - } - \end{codeblock} - \exitexample - - \alinea - \enterexample - \begin{codeblock} - // Header file X.h - struct X { /* ... */ }; - X operator+(X, X); - - // Module interface unit of F - export module F; - export template - void f(T t) { - t + t; - } - - // Module interface unit of M - @\begin{after}\color{addclr} - module; - \end{after}@ - #include "X.h" - import F; - export module M; - void g(X x) { - f(x); // OK: instantiates f from F - // point of instantiation: just before g(X) - } - \end{codeblock} - \exitexample - - \alinea - \enternote - \enterexample - \begin{codeblock} - // Module interface unit of A - export module A; - export template - void f(T t) { - t + t; // \#1 - } - - // Module interface unit of B - export module B; - import A; - export template - void g(T t, U u) { - f(t); - } - - // Module interface unit of C - @\begin{after}\color{addclr} - module; - \end{after}@ - #include // not in the purview of C - import B; - export module C; - export template - void h(T t) { - g(std::string{ }, t); - } - - // Translation unit of main() - import C; - void i() { - h(0); // ill-formed: '+' not found at \#1 - // point of instantiation of h: just before 'i()' - // point of instantiation of g: same as h's - // point of instantiation of f: same as g's - } - \end{codeblock} - \exitexample - - This example is ill-formed by this document. - It is an open question as to how often the scenario occurs in - practice, and whether to make the example well-formed or whether - additional syntax will be introduced that does not involve - modifying the header. - \exitnote - - \alinea - \enternote - \enterexample - \begin{codeblock} - // Module interface unit of M1 - @\begin{after}\color{addclr}module;\end{after}@ - #include - - export module M1; - export template - void f(T& t, U& u) { - min(t, u); // \#1 - } - - // Module interface unit of M2 - @\begin{after}\color{addclr}module;\end{after}@ - #include - struct Aux : std::ctype_base { - operator int() const; - }; - void min(Aux&, Aux&); // \#2 - - export module M2; - import M1; - export template - void g(T t) { - Aux aux; - f(aux, aux); - } - - // Elsewhere, translation unit of global module - import M2; - void h() { - g(0); - } - \end{codeblock} - In the body of the function \tcode{h}, the call to \tcode{g} triggers a request - for (implicit) instantiation of \tcode{g}. The point of instantiation of - that specialization is right before the definition of \tcode{h}. - That instantiation, in turn, requests the implicit instantiation of - \tcode{f}. The point of instantiation of that specialization - immediately preceeds that of \tcode{g}. In that context, the invocation of - \tcode{min}: (a) selects \tcode{std::min}; and (b) invokes the - implicit conversion. In particular, the declaration at {\#2} is not used - because it is neither available in the context of definition, nor in the - context of instantiation of \tcode{f}. - However, paragraph 17.6.4.2/1 of the C++ Standard formally renders the behavior - of the program undefined because the better match wasn't considered. This is - a case where it is unclear if that paragraph is too broad and needs further restrictions, - or if there ought to be a mechanism to consider all such functions. - \exitexample - \exitnote +\color{addclr} +\alinea +\enterexample +\begin{codeblock} +// interface unit of \tcode{Std} +export module Std; +export template +void indirect_swap(Iter lhs, Iter rhs) +{ + swap(*lhs, *rhs); // swap can be found only via ADL +} + +// interface unit of \tcode{M} +module; +import Std; +export module M; + +struct S { /* ...*/ }; +void swap(S&, S&); // \#1; + +void f(S* p, S* q) +{ + indirect_swap(p, q); // finds \#1 via ADL in instantiation context +} +\end{codeblock} +\exitexample + +\alinea +\enterexample +\begin{codeblock} +// header file \tcode{"X.h"} +struct X { /* ... */ }; +X operator+(X, X); + +// module interface unit of \tcode{F} +export module F; +export template +void f(T t) { + t + t; +} + +// module interface unit of \tcode{M} +module; +#include "X.h" +import F; +export module M; +void g(X x) { + f(x); // OK: instantiates \tcode{f} from \tcode{F}, + // \tcode{operator+} is visible in instantiation context +} +\end{codeblock} +\exitexample + +\alinea +\enterexample +\begin{codeblock} +// module interface unit of \tcode{A} +export module A; +export template +void f(T t) { + t + t; // \#1 +} + +// module interface unit of \tcode{B} +export module B; +import A; +export template +void g(T t, U u) { + f(t); +} + +// module interface unit of \tcode{C1} +module; +#include // \tcode{operator+} not referenced, discarded +export module C1; +import B; +export template +void h(T t) { + g(std::string{ }, t); +} + +// translation unit +import C1; +void i() { + h(0); // ill-formed: '+' not found at \#1 +} + +// module interface unit of \tcode{C2} +export module C1; +import B; +import ; +export template +void h(T t) { + g(std::string{ }, t); +} + +// translation unit +import C1; +void i() { + h(0); // OK, '+' found in instantiation context: + // visible at end of module interface unit of \tcode{C2} +} +\end{codeblock} +\exitexample \end{std.txt} - \rSec3[temp.point]{Point of instantiation} \noindent -Replace paragraph 17.6.4.1/7 as follows: +Delete paragraph 12.7.4.1/7: \begin{std.txt} - \resetalinea[6] - \alinea - \removed{The instantiation context of an expression that depends on - the template arguments is the set of declarations with external - linkage declared prior to the point of instantiation of the - template specialization in the same translation unit.}\added{The - instantiation context of an expression that depends on template - arguments is the context of a lookup at the point of instantiation - of the enclosing template.} +\resetalinea[6] +\alinea +\removed{The instantiation context of an expression that depends on +the template arguments is the set of declarations with external +linkage declared prior to the point of instantiation of the +template specialization in the same translation unit.} \end{std.txt} - \rSec3[temp.dep.candidate]{Candidate functions} \noindent -Modify paragraph 17.6.4.2/1 as follows +Modify paragraph 12.7.4.2/1 as follows \begin{std.txt} - \resetalinea[0] - \alinea - \ldots - - If the call would be ill-formed or would find a better match had the - lookup within the associated namespaces considered all the function - declarations with external \added{or module} - linkage introduced in those namespaces in all - translation units, not just considering those declarations found in the - template definition and template instantiation contexts, then the program - has undefined behavior. +\resetalinea[0] +\alinea +\ldots +If the call would be ill-formed or would find a better match had the +lookup within the associated namespaces considered all the function +declarations with external \added{or module} +linkage introduced in those namespaces in all +translation units, not just considering those declarations found in the +template definition and template instantiation contexts, then the program +has undefined behavior. \end{std.txt} From 854145693cfbf6adcfb9567490053740ac021046 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 5 Oct 2018 14:59:57 -0700 Subject: [PATCH 24/77] Terminology cleanup. --- src/basic.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index ad5b549..4dc9580 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -532,10 +532,10 @@ // module interface of M module; int f(); // \#1 - int g(); // \#2, owned by the global module + int g(); // \#2, attached to the global module export module M; export using ::f; // OK: does not declare an entity - int g(); // error: matches \#2, but appears in the purview of M + int g(); // error: matches \#2, but attached to M export int h(); // \#3 export int k(); // \#4 From 2901bbe97462b8aa7fc53e2ee61ff7855ae555a1 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 5 Oct 2018 15:04:03 -0700 Subject: [PATCH 25/77] Add important acknowledgement. --- src/bg.tex | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/bg.tex b/src/bg.tex index e8abc13..a6204ad 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -30,6 +30,13 @@ the wording of the Modules TS) to incorporate this design into the C++20 working draft. +\rSec1[bg.ack]{Acknowledgements} + +This paper is based on the work of a great many people. +The author would like to thank them all, and specifically +Gabriel Dos Reis, on whose Modules TS this paper is primarily +based. + %\rSec1[bg.conventions]{Stylistic conventions} % %The wording section of this document describes a ``diff of a diff.'' From a867767032d68eea5875c9a68ccea7cd155c1a71 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 5 Oct 2018 15:04:37 -0700 Subject: [PATCH 26/77] Fix heading level in front matter. --- src/bg.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bg.tex b/src/bg.tex index a6204ad..21282d8 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -484,7 +484,7 @@ In addition, exported declarations in the owning module of each associated type are visible to ADL. -\rSec1[vs.r0.preamble]{Finding the end of the preamble} +\rSec2[vs.r0.preamble]{Finding the end of the preamble} \pnum In R0 of this proposal, the preprocessor was burdened with finding From c76dfa8794376d017e3000849ec6c430f66c58b2 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 5 Oct 2018 15:25:30 -0700 Subject: [PATCH 27/77] Fix up some wrong section numbers and delete an unused grammar production. --- src/classes.tex | 8 ++++---- src/preprocessor.tex | 14 -------------- src/templates.tex | 5 +++-- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/classes.tex b/src/classes.tex index 967bb4a..30ccc25 100644 --- a/src/classes.tex +++ b/src/classes.tex @@ -1,17 +1,17 @@ %!TEX root = std.tex -\setcounter{chapter}{11} +\setcounter{chapter}{9} \rSec0[class]{Classes} \setcounter{section}{1} \rSec1[class.mem]{Class members} -\setcounter{subsection}{3} +\setcounter{subsection}{9} \rSec2[class.bit]{Bit-fields} -Modify paragraph 12.2.4/1 as follows: +Modify paragraph 10.2.10/1 as follows: \begin{std.txt} \resetalinea[0] \alinea [...] The bit-field \removed{attribute}\added{semantic property} is not part of the type of the class member. [...] -\end{std.txt} \ No newline at end of file +\end{std.txt} diff --git a/src/preprocessor.tex b/src/preprocessor.tex index d789861..26e59c7 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -44,7 +44,6 @@ \end{std.txt} \end{after} -\begin{after} \noindent Add a new subclause 14.3 titled ``\textbf{Global module fragment}'' as follows: @@ -164,16 +163,6 @@ The relative order of \grammarterm{pp-import}{s} has no bearing on whether a particular macro definition is active. \exitnote -\end{std.txt} -\end{after} - -\begin{after}\color{addclr} -\begin{std.txt} -\begin{bnf} -\nonterminal{pp-preamble}:\br - \terminal{module} pp-decl-suffix \terminal{;}\br - pp-preamble \terminal{export}\opt{} \terminal{import} pp-decl-suffix \terminal{;} -\end{bnf} \alinea If an imported macro is replaced (\stdref{cpp.replace}{14.3}) @@ -181,7 +170,4 @@ outside of a \grammarterm{pp-global-module-fragment}, there shall be no \grammarterm{pp-import}{s} with a later point of macro import. - \end{std.txt} - -\end{after} diff --git a/src/templates.tex b/src/templates.tex index cf5071c..80eabdf 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -4,7 +4,7 @@ %\indextext{template|(} \noindent -Modify paragraph 11/2 as follows: +Modify paragraph 12/4 as follows: \begin{std.txt} \resetalinea[1] \alinea @@ -14,6 +14,7 @@ \grammarterm{export-declaration}.} In a function template declaration, the last component of the \grammarterm{declarator-id} shall not be a \grammarterm{template-id}. + [...] \end{std.txt} @@ -34,7 +35,7 @@ %% instantiation context (14.6.4.1) and from the definition context. %% \end{std.txt} -\setcounter{section}{5} +\setcounter{section}{6} \rSec1[temp.res]{Name resolution} \setcounter{subsection}{3} \rSec2[temp.dep.res]{Dependent name resolution} From 94e8c67a08783f0be10f76545a929775f4d7e18b Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 8 Oct 2018 12:44:11 -0700 Subject: [PATCH 28/77] P1103R1. --- src/config.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.tex b/src/config.tex index be7cdbc..61ff67b 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,7 +1,7 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{D1103R1} +\newcommand{\docno}{P1103R1} \newcommand{\prevdocno}{P1103R0} %\newcommand{\cppver}{201703L} From b2e71153c1857fbc2fc40e22f70360e304443bf6 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 8 Oct 2018 12:44:33 -0700 Subject: [PATCH 29/77] Update config for papers after P1103R1. --- src/config.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config.tex b/src/config.tex index 61ff67b..a3f0ca0 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,8 +1,8 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{P1103R1} -\newcommand{\prevdocno}{P1103R0} +\newcommand{\docno}{D1103R2} +\newcommand{\prevdocno}{P1103R1} %\newcommand{\cppver}{201703L} %% Title From d8631192c18b90ceeef49762c54b13d8a458011a Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 1 Nov 2018 18:32:24 -0700 Subject: [PATCH 30/77] Wording clarifications and simplifications requested by Nathan. --- src/basic.tex | 3 ++- src/bg.tex | 4 ++++ src/declarations.tex | 13 ++++--------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 4dc9580..89023c0 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -324,7 +324,8 @@ \added{All declarations that are visible at any point in the instantiation context (\ref{dcl.module.context}) of the lookup are visible even if they are not visible during an ordinary lookup, - excluding internal linkage declarations attached to the global module.} + excluding discarded declarations (\ref{dcl.module.global}) and + internal linkage declarations attached to the global module.} \end{itemize} \end{std.txt} diff --git a/src/bg.tex b/src/bg.tex index 21282d8..8ed7e97 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -321,6 +321,10 @@ cost for some implementations, so we leave the extent to which this rule is enforced up to the implementation.) +\pnum +Discarded declarations (\ref{merged.legacy.frag}) from the global module +fragment are never visible nor reachable from outside that module unit. + \rSec2[merged.nonmodular.use]{Module use from non-modular code} \pnum diff --git a/src/declarations.tex b/src/declarations.tex index 142fb0b..b731a1d 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -165,25 +165,20 @@ \begin{bnf}\color{addclr} \nonterminal{module-name}:\br - module-name-qualifier-seq\opt identifier + module-name-qualifier\opt identifier \end{bnf} \begin{after} \begin{bnf}\color{addclr} \nonterminal{module-partition}:\br - \terminal{:} module-name-qualifier-seq\opt identifier + \terminal{:} module-name-qualifier\opt identifier \end{bnf} \end{after} - \begin{bnf}\color{addclr} - \nonterminal{module-name-qualifier-seq}:\br - module-name-qualifier \terminal{.}\br - module-name-qualifier-seq identifier \terminal{.} - \end{bnf} - \begin{bnf}\color{addclr} \nonterminal{module-name-qualifier}:\br - identifier + identifier \terminal{.}\br + module-name-qualifier identifier \terminal{.} \end{bnf} \resetalinea[0] From e1a88cb5d3ad87f0a6fb0661eab7b9627a2499e6 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sun, 4 Nov 2018 23:56:14 -0800 Subject: [PATCH 31/77] =?UTF-8?q?Fixes=20based=20on=20feedback=20from=20To?= =?UTF-8?q?masz=20Kami=C5=84ski.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/declarations.tex | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index b731a1d..0a191f4 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -365,20 +365,25 @@ \begin{codeblock} // TU 2 -module B:X; // does not implicitly import \tcode{B} +module B:X1; // does not implicitly import \tcode{B} int &a = n; // error: \tcode{n} not visible here +\end{codeblock} + +\begin{codeblock} +// TU 3 +module B:X2; // does not implicitly import \tcode{B} import B; int &b = n; // OK \end{codeblock} \begin{codeblock} -// TU 3 +// TU 4 module B:Y; // does not implicitly import \tcode{B} int y(); \end{codeblock} \begin{codeblock} -// TU 4 +// TU 5 module B; // implicitly imports \tcode{B} int &c = n; // OK \end{codeblock} @@ -481,7 +486,9 @@ \end{codeblock} \end{example} \enternote - Names introduced by \tcode{typedef} declarations are not so constrained. + Names introduced by \tcode{typedef} declarations + and \grammarterm{alias-declaration}{s} + are not so constrained. \begin{example} \begin{codeblock} export module M; From 50bfc09428feedd8de6923fd421edeefec4e1edc Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 7 Nov 2018 20:22:34 -0800 Subject: [PATCH 32/77] Remove comma, from review by Davis Herring. --- src/basic.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic.tex b/src/basic.tex index 89023c0..9b9a663 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -252,7 +252,7 @@ \item[---] If \tcode{T} is an enumeration type, its associated namespace is the innermost enclosing namespace of its - declaration\added{, and its associated entities are \tcode{T}, and, + declaration\added{, and its associated entities are \tcode{T} and, if}\removed{. If} it is a class member, \removed{its associated class is} the member's class\removed{; else it has no associated class}. From bffc812cc041cd9114e9a7d6efcaad635e9e6d96 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 7 Nov 2018 20:23:29 -0800 Subject: [PATCH 33/77] P1299R2 Module preamble is unnecessarily fragile Remove the fragile 'no imported macro expansion before end of preamble' rule. --- src/preprocessor.tex | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 26e59c7..a806409 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -163,11 +163,4 @@ The relative order of \grammarterm{pp-import}{s} has no bearing on whether a particular macro definition is active. \exitnote - -\alinea -If an imported macro is replaced (\stdref{cpp.replace}{14.3}) -or is named by a \grammarterm{defined-macro-expression} -outside of a \grammarterm{pp-global-module-fragment}, -there shall be no \grammarterm{pp-import}{s} with a -later point of macro import. \end{std.txt} From 01fdf21f3812057de7a4a924e990f3a16cb0c412 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 7 Nov 2018 21:43:46 -0800 Subject: [PATCH 34/77] P1242R1 Single-file modules with the Atom semantic properties rule --- src/basic.tex | 11 +++++++++-- src/declarations.tex | 31 +++++++++++++++++++++++-------- src/templates.tex | 19 +++++++++++++++++++ 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 9b9a663..9f6bc9f 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -359,7 +359,7 @@ \begin{after} \begin{bnf} \nonterminal{translation-unit}:\br - \added{preamble\opt} declaration-seq\opt + \added{preamble\opt} declaration-seq\opt \added{private-module-fragment\opt} \end{bnf} \begin{bnf} @@ -368,8 +368,15 @@ preamble\opt module-import-declaration} \end{bnf} +\begin{bnf} +\added{\nonterminal{private-module-fragment}:\br + \terminal{module} \terminal{:} \terminal{private} \terminal{;} declaration-seq\opt} +\end{bnf} + \added{The \grammarterm{preamble} includes the longest possible sequence of -\grammarterm{module-import-declaration}{s}.} +\grammarterm{module-import-declaration}{s}. +A \grammarterm{private-module-fragment} shall only appear +in a primary module interface unit (\ref{dcl.module.unit}).} \end{after} \noindent diff --git a/src/declarations.tex b/src/declarations.tex index 0a191f4..ef183f8 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -82,7 +82,8 @@ \alinea \added{An exported inline function or variable shall be defined in the translation unit - containing its exported declaration. + containing its exported declaration, + outside the \grammarterm{private-module-fragment} (if any). \enternote There is no restriction on the linkage (or absence thereof) of entities that the function body of an exported inline function @@ -405,7 +406,8 @@ An \grammarterm{export-declaration} shall only appear at namespace scope and only in the purview of a module interface unit. An \grammarterm{export-declaration} shall not appear directly - or indirectly within an unnamed namespace. + or indirectly within an unnamed namespace + or a \grammarterm{private-module-fragment}. An \grammarterm{export-declaration} has the declarative effects of its \grammarterm{declaration} or its \grammarterm{declaration-seq} (if any). @@ -1350,12 +1352,17 @@ \item the unique result of name lookup for an \grammarterm{unqualified-id} or \grammarterm{identifier} in $M$ -or in a template instantiation whose point of instantiation is in $M$, or +or in a template instantiation whose point of instantiation is in $M$ +and is not within a \grammarterm{private-module-fragment}, or \item a function named by an expression (\ref{basic.def.odr}) in $M$ -or in a template instantiation whose point of instantiation is in $M$, or +or in a template instantiation whose point of instantiation is in $M$ +and is not within a \grammarterm{private-module-fragment}, or \item -a lookup result for a dependent name in $M$ (\stdref{temp.dep.res}{12.7.4}) +a lookup result for a dependent name that appears in $M$ +and not within a \grammarterm{private-module-fragment} +(\stdref{temp.dep.res}{12.7.4}) +and that is visible at the point of definition of the enclosing template, or \item a declaration of an entity that is in the basis of a declaration referenced @@ -1392,7 +1399,11 @@ the instantiation context of the enclosing specialization and, if the template is defined in a module interface unit of a module $M$ and the point of instantiation is not in a module interface unit of $M$, -the point at the end of the primary module interface unit of $M$. +the point at the end of the +\grammarterm{declaration-seq} of the +primary module interface unit of $M$ +(prior to the \grammarterm{private-module-fragment}, +if one is present). \alinea During the implicit instantiation of a template @@ -1491,8 +1502,12 @@ instantiation context (\ref{dcl.module.context}), \begin{itemize} \item it appears prior to that program point in the same translation unit, or -\item it is not discarded (\ref{dcl.module.global}) and -appears in a translation unit that is reachable from that program point. +\item it is not discarded (\ref{dcl.module.global}), +appears in a translation unit that is reachable from that program point, +and +either does not appear within a \grammarterm{private-module-fragment} +or appears in a \grammarterm{private-module-fragment} +of the module containing the program point. \end{itemize} \enternote Whether a declaration is exported has no bearing on whether it is reachable. diff --git a/src/templates.tex b/src/templates.tex index 80eabdf..dcd0360 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -211,6 +211,25 @@ template specialization in the same translation unit.} \end{std.txt} +\noindent +Change in paragraph \ref{temp.point}/8: +\begin{std.txt} +\resetalinea[7] +\alinea +in addition to the points of instantiation described above, for any such +specialization that has a point of instantiation within the +\added{\grammarterm{declaration-seq} of the} +translation unit, +\added{prior to the \grammarterm{private-module-fragment} (if any), +the point after the \grammarterm{declaration-seq} +of the \grammarterm{translation-unit} +is also considered a point of instantiation, +and for any such specialization that has a point of instantiation +within the \grammarterm{private-module-fragment},} +the end of the translation unit is also +considered a point of instantiation. +\end{std.txt} + \rSec3[temp.dep.candidate]{Candidate functions} \noindent From 1d19b30ad969cb8503172196b212293ff8dd45b8 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 8 Nov 2018 13:20:41 -0800 Subject: [PATCH 35/77] CWG review up to this point. --- src/basic.tex | 116 ++++++++++++++++++++----------------------- src/declarations.tex | 66 ++++++++++++------------ src/lexical.tex | 24 ++++++--- src/preprocessor.tex | 19 +++---- src/ts.tex | 4 +- 5 files changed, 115 insertions(+), 114 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 9f6bc9f..a7cf2f0 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -16,23 +16,6 @@ [...] \end{std.txt} -\noindent -Add the following two bullets to paragraph 6.1/2: -\begin{std.txt} - \resetalinea[1] - \alinea - Each entity declared by a \grammarterm{declaration} is also \term{defined} - by that declaration unless: - \begin{itemize} - \item ... - \color{addclr} - \item \added{it is a \grammarterm{module-import-declaration},} - \color{black} - \item ... - \end{itemize} -\end{std.txt} - - \rSec1[basic.def.odr]{One-definition rule} Change paragraph 6.2/1 as follows: @@ -194,9 +177,8 @@ [...] Only after name lookup, function overload resolution (if applicable) and access checking have succeeded are the \removed{attributes}\added{semantic properties} introduced by - \removed{the name's declaration} - \added{the reachable (\ref{dcl.module.reach}) redeclarations - of that declaration} + the name's declaration + \added{and its reachable (\ref{dcl.module.reach}) redeclarations} used further in the expression processing (Clause 7). \end{std.txt} @@ -337,47 +319,55 @@ Change the definition of \term{translation-unit} in paragraph 6.5/1 to: -\begin{before} -\begin{bnf}\color{addclr} - \added{\nonterminal{translation-unit}\br - toplevel-declaration-seq\opt} -\end{bnf} - -\begin{bnf}\color{addclr} - \added{\nonterminal{toplevel-declaration-seq}\br - toplevel-declaration\br - toplevel-declaration-seq toplevel-declaration} -\end{bnf} - -\begin{bnf}\color{addclr} - \added{\nonterminal{toplevel-declaration}\br - module-declaration\br - declaration} -\end{bnf} -\end{before} - -\begin{after} \begin{bnf} \nonterminal{translation-unit}:\br - \added{preamble\opt} declaration-seq\opt \added{private-module-fragment\opt} + \added{top-level-}declaration-seq\opt\br + \added{preamble top-level-declaration-seq\opt private-module-fragment\opt} \end{bnf} \begin{bnf} \added{\nonterminal{preamble}:\br global-module-fragment\opt module-declaration\br - preamble\opt module-import-declaration} + preamble module-import-declaration} \end{bnf} \begin{bnf} \added{\nonterminal{private-module-fragment}:\br - \terminal{module} \terminal{:} \terminal{private} \terminal{;} declaration-seq\opt} + \terminal{module} \terminal{:} \terminal{private} \terminal{;} top-level-declaration-seq\opt} +\end{bnf} + +\begin{bnf}\color{addclr} + \added{\nonterminal{top-level-declaration-seq}\br + top-level-declaration\br + top-level-declaration-seq top-level-declaration} \end{bnf} +\begin{bnf}\color{addclr} + \added{\nonterminal{top-level-declaration}\br + module-import-declaration\br + declaration} +\end{bnf} + +\noindent +Add new paragraphs after the grammar: + +\begin{std.txt} +\alinea \added{The \grammarterm{preamble} includes the longest possible sequence of -\grammarterm{module-import-declaration}{s}. -A \grammarterm{private-module-fragment} shall only appear +\grammarterm{module-import-declaration}{s}.} + +\alinea +\added{A \grammarterm{private-module-fragment} shall only appear in a primary module interface unit (\ref{dcl.module.unit}).} -\end{after} + +\alinea +\added{A token sequence beginning with +\tcode{export}\opt{} \tcode{module} or +\tcode{export}\opt{} \tcode{import} +and not immediately followed by \tcode{::} +is never interpreted as the \grammarterm{declaration} +of a \grammarterm{top-level-declaration}.} +\end{std.txt} \noindent Insert a new bullet between first and second bullet of paragraph 6.5/2: @@ -396,9 +386,21 @@ Modify bullet (3.2) of paragraph 6.5/3 as follows: \begin{std.txt} \begin{itemize} - \item[---] a non-inline \added{non-exported} variable of non-volatile const-qualified type - that is neither explicitly declared \tcode{extern} nor - previously declared to have external \added{or module} linkage; or + \item[---] + %a non-inline \added{non-exported} variable of non-volatile const-qualified type + %that is neither explicitly declared \tcode{extern} nor + %previously declared to have external \added{or module} linkage; or + a \removed{non-inline} variable of non-volatile const-qualified type\added{, + unless} + \begin{itemize} + \color{addclr} + \item[---] \added{it is declared \tcode{extern}, or} + \item[---] \added{it is inline or exported, or} + \item[---] \added{it was previously declared and the prior declaration did + not have internal linkage; or} + \end{itemize} + \removed{that is neither explicitly declared \tcode{extern} nor + previously declared to have external linkage; or} \end{itemize} \end{std.txt} @@ -476,30 +478,22 @@ \alinea The name of a function declared in block scope and the name of a variable declared by a block scope extern declaration have linkage. +\added{If such a declaration is attached to a named module, +the program is ill-formed.} If there is a visible declaration of an entity with linkage having the same name and type, ignoring entities declared outside the innermost enclosing namespace scope, the block scope declaration declares that same entity and receives the linkage of the previous declaration. -\begin{before} -\added{If that entity was exported by an imported module - -or if the containing block scope is in the purview of a named module, the program is -ill-formed.} -\end{before} If there is more than one such matching entity, the program is ill-formed. Otherwise, if no matching entity is found, the block scope entity receives external linkage. -\begin{after} -\added{If the declaration is attached to a named module, -the program is ill-formed.} -\end{after} \end{std.txt} \noindent -Modify paragraph 6.5/9 and add /10 as follows: +Modify paragraph 6.5/10 and add /11 as follows: \begin{std.txt} - \resetalinea[8] + \resetalinea[9] \alinea \addtocounter{footnote}{1} Two diff --git a/src/declarations.tex b/src/declarations.tex index ef183f8..328c5a5 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -21,10 +21,7 @@ namespace-definition\br empty-declaration\br attribute-declaration\br - \color{addclr} - \added{export-declaration\br - module-import-declaration}\br - \begin{before}\added{proclaimed-ownership-declaration}\end{before} + \added{export-declaration}\br \end{bnf} \end{std.txt} @@ -50,16 +47,17 @@ the inline variable may be encountered before its definition appears in the translation unit. \exitnote - If the definition of a\added{n inline} function or variable - appears in a translation unit - \added{at a point where no inline declaration of it is visible} - \removed{before its first declaration as inline}, + % + If \removed{the} \added{a} definition of a function or variable + \removed{appears in a translation unit before} + \added{is reachable at the point of} + its first declaration as inline, the program is ill-formed. If a function or variable with external \added{or module} linkage is declared inline in one translation unit, \added{there} \removed{it} shall be - \added{a visible} \removed{declared} inline + \added{a reachable} \removed{declared} inline \added{declaration} in all translation units in which it \removed{appears}\added{is declared}; no diagnostic is required. An inline function or variable with @@ -305,12 +303,12 @@ \begin{after}\color{addclr} A declaration is \term{attached} to a module determined as follows: \begin{itemize}\color{addclr} - \item If the declaration is + \item If the declaration \begin{itemize}\color{addclr} - \item a replaceable global allocation or deallocation + \item is a replaceable global allocation or deallocation function (\stdref{new.delete.single}{21.6.2.1}, \stdref{new.delete.array}{21.6.2.2}), or - \item a \grammarterm{namespace-declaration} with external linkage, or - \item within a \grammarterm{linkage-specification}, + \item is a \grammarterm{namespace-declaration} with external linkage, or + \item appears within a \grammarterm{linkage-specification}, \end{itemize}\color{addclr} it is attached to the global module. @@ -403,7 +401,7 @@ \resetalinea[0] \alinea - An \grammarterm{export-declaration} shall only appear + An \grammarterm{export-declaration} shall appear only at namespace scope and only in the purview of a module interface unit. An \grammarterm{export-declaration} shall not appear directly or indirectly within an unnamed namespace @@ -424,8 +422,8 @@ \item a \grammarterm{module-import-declaration} declared with the \tcode{export} keyword (\ref{dcl.module.import}), or \item a \grammarterm{namespace-definition} that contains an - \grammarterm{export-declaration}, or - \item a declaration within a legacy header unit (\ref{dcl.module.import}) + exported declaration, or + \item a declaration within a header unit (\ref{dcl.module.import}) that satisfies the rules for an exported declaration below. \end{itemize} The \term{interface} of a module \tcode{M} is the set of all @@ -443,7 +441,7 @@ \alinea An exported declaration shall declare at least one name. - If the declaration is not within a legacy header unit, + If the declaration is not within a header unit, it shall not declare a name with internal linkage. %\grammarterm{decl-specifier-seq} (if any) of the %\grammarterm{declaration} shall not contain \tcode{static}, @@ -502,11 +500,12 @@ \begin{after}\color{addclr} \alinea - An exported declaration shall not redeclare a non-exported declaration. + If a redeclaration is exported + and the first declaration was not exported, + the program is ill-formed. \begin{example} \begin{codeblock} export module M; - export struct S; struct S { int n; }; export typedef S S; // OK, not a redeclaration of \tcode{struct S} export struct S; // error: exported declaration follows non-exported definition @@ -560,7 +559,7 @@ // Interface unit of M export module M; export struct X { - void f(); + static void f(); struct Y { }; }; @@ -588,10 +587,10 @@ // main program import M; int main() { - X{}.f(); // OK: X and X::f are exported - X::Y y; // OK: X::Y is exported as a complete type + X::f(); // OK: \tcode{X} is exported and definition of \tcode{X} is reachable + X::Y y; // OK: \tcode{X::Y} is exported as a complete type auto f = rootFinder(2); // OK - return A{45}.value; // error: A is incomplete + return A{45}.value; // error: \tcode{A} is incomplete } \end{codeblock} \end{example} @@ -702,35 +701,38 @@ \alinea A \grammarterm{module-import-declaration} that specifies a \grammarterm{header-name} $H$ imports - a synthesized \term{legacy header unit}, + a synthesized \term{header unit}, which is a translation unit formed by applying phases 1 to 7 of translation (\stdref{lex.phases}{5.2}) to the source file nominated by $H$, which shall not contain a \grammarterm{module-declaration}. \enternote - All declarations within a legacy header unit are implicitly + All declarations within a header unit are implicitly exported, and are attached to the global module. \exitnote + $H$ shall identify an importable header; + how the set of importable headers is specified + is implementation-defined. Two \grammarterm{module-import-declaration}{s} - import the same legacy header unit if and only if + import the same header unit if and only if their \grammarterm{header-name}{s} identify the same header or source file (\ref{cpp.include}). \enternote A \grammarterm{module-import-declaration} nominating a \grammarterm{header-name} is also recognized by the preprocessor, and results in macros defined at the - end of phase 4 of translation of the legacy header unit + end of phase 4 of translation of the header unit being made visible as described in \ref{cpp.module}. \exitnote A declaration of a name with internal linkage is - permitted within a legacy header unit despite all + permitted within a header unit despite all declarations being implicitly exported. If such a name is - odr-used by a translation unit outside the legacy + odr-used by a translation unit outside the header unit, or by an instantiation unit for a template instantiation whose point of instantiation is outside - the legacy header unit, the program is ill-formed. + the header unit, the program is ill-formed. \alinea When a \grammarterm{module-import-declaration} imports @@ -963,7 +965,7 @@ \begin{std.txt}\color{addclr} \begin{bnf} \nonterminal{global-module-fragment}:\br - \terminal{module} \terminal{;} declaration-seq + \terminal{module} \terminal{;} top-level-declaration-seq \end{bnf} \resetalinea[0] @@ -1400,7 +1402,7 @@ if the template is defined in a module interface unit of a module $M$ and the point of instantiation is not in a module interface unit of $M$, the point at the end of the -\grammarterm{declaration-seq} of the +\grammarterm{top-level-declaration-seq} of the primary module interface unit of $M$ (prior to the \grammarterm{private-module-fragment}, if one is present). diff --git a/src/lexical.tex b/src/lexical.tex index 20fdf6f..daa785e 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -40,10 +40,9 @@ The process of analyzing and translating the tokens may occasionally result in one token being replaced by a sequence of other tokens (17.2). \exitnote - \added{It is implementation-defined whether the sources for} - \begin{before}\added{module interface units for modules}\end{before} - \begin{after}\added{module units}\end{after} - \added{on which the current translation unit has an interface + \added{It is implementation-defined whether the sources for + module units and header units + on which the current translation unit has an interface dependency (\ref{dcl.module.import}) are required to be available.} \enternote Source files, translation units and translated translation units need not @@ -71,16 +70,25 @@ within a \tcode{\#include} directive (19.2) \added{or when the previous preprocessing token was lexically identical to the -\grammarterm{identifier} \tcode{import}.} +\grammarterm{identifier} \tcode{import} +and the preprocessing tokens are separated by white space.} \end{std.txt} \end{after} +\setcounter{section}{9} +\Sec1[lex.name]{Identifiers} + +In \ref{lex.name}, add these two identifiers to Table 4, +``Identifiers with special meaning'': + +\begin{std.txt} +\added{module}\\ +\added{import} +\end{std.txt} + \setcounter{section}{10} \Sec1[lex.key]{Keywords} -In \ref{lex.key}, add these two keywords to Table 5 in paragraph -5.11/1: \added{module} and \added{import}. - \noindent Modify note in paragraph \ref{lex.key}/1 as follows: \begin{std.txt} diff --git a/src/preprocessor.tex b/src/preprocessor.tex index a806409..6662e3b 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -11,7 +11,7 @@ The implementation can process and skip sections of source files conditionally, include other source files, -\added{import macros from legacy header units,} +\added{import macros from header units,} and replace macros. These capabilities are called \term{preprocessing}, @@ -31,16 +31,13 @@ \color{addclr} \alinea If the header identified by the \grammarterm{header-name} -denotes a legacy header unit, the preprocessing directive +denotes an importable header (\ref{dcl.module.import}), +the preprocessing directive is instead replaced by the \grammarterm{preprocessing-token}{s} \begin{bnf} \terminal{import} header-name \terminal{;} \end{bnf} - -\color{addclr} -How the set of headers denoting legacy header units is specified -is implementation-defined. \end{std.txt} \end{after} @@ -81,7 +78,7 @@ \color{addclr} \begin{bnf} \nonterminal{pp-import}:\br - \terminal{import}\opt{} header-name pp-decl-suffix\opt{} \terminal{;} + \terminal{import} header-name pp-decl-suffix\opt{} \terminal{;} \end{bnf} \begin{bnf} @@ -110,7 +107,7 @@ \alinea A sequence of \grammarterm{preprocessing-token}{s} matching the form of a \grammarterm{pp-import} -instructs the preprocessor to import macros from the legacy header unit +instructs the preprocessor to import macros from the header unit (\ref{dcl.module.import}) denoted by the \grammarterm{header-name}. The \tcode{;} \grammarterm{preprocessing-token} shall not be produced by macro replacement (\stdref{cpp.replace}{14.3}). @@ -122,13 +119,13 @@ A \term{macro directive} for a macro name is a \tcode{\#define} or \tcode{\#undef} directive naming that macro name. An \term{exported macro directive} is -a macro directive occuring in a legacy header unit +a macro directive occuring in a header unit \color{addclr} whose macro name is not lexically identical to a keyword. A macro directive is \term{visible} at a source location if it precedes that source location in the same translation unit, or -if it is an exported macro directive whose legacy header unit, -or a legacy header unit that +if it is an exported macro directive whose header unit, +or a header unit that \color{addclr} transitively imports it, is imported into the current translation unit by a \grammarterm{pp-import} diff --git a/src/ts.tex b/src/ts.tex index d0a7850..7b1a47b 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -129,8 +129,8 @@ %%-------------------------------------------------- %% appendices -%\appendix -%\include{compatibility} +\appendix +\include{compat} %%-------------------------------------------------- %% back matter From d12cc079988052f7d40d22fc3f85f3a939bb857c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 8 Nov 2018 21:18:13 -0800 Subject: [PATCH 36/77] Demote normative duplication of meaning of 'discarded' to a note, and reverse some parts of it to make it more readable. --- src/declarations.tex | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index 328c5a5..851f42d 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -981,12 +981,15 @@ \alinea Declarations in the global module fragment are \term{discarded} if they -are not referenced by the module unit. A discarded declaration is only -available to name lookup and reachable within the module unit -and template instantiations whose points of instantiation -(\stdref{temp.point}{12.7.4.1}) are within the module, +are not referenced by the module unit. +\begin{note} +A discarded declaration is neither reachable +nor visible to name lookup outside the module unit, +nor in template instantiations whose points of instantiation +(\stdref{temp.point}{12.7.4.1}) are outside the module unit, even when the instantiation context (\ref{dcl.module.context}) includes the module unit. +\end{note} \begin{example} \begin{codeblock} // header "foo.h" From 11e3c35538e452749d787608e5f0f11b1fb38871 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 8 Nov 2018 23:55:26 -0800 Subject: [PATCH 37/77] More updates based on feedback from Davis. --- src/declarations.tex | 289 ++++++------------------------------------- 1 file changed, 39 insertions(+), 250 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index 851f42d..8ef535d 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -1032,33 +1032,36 @@ \item If $D$ declares a \grammarterm{typedef-name}, the basis is the type-basis of the aliased type. -\item If $D$ declares a variable or function, the basis is the type-basis -of the type of that variable or function and the innermost enclosing -namespace, class, or function. +\item If $D$ declares a variable or function, +the basis is the union of +the type-basis of the type of that variable or function +and the set containing the +innermost enclosing namespace, class, or function. \item If $D$ defines a class type, the basis is the union of the type-bases of its direct base classes (if any), and the bases of its \grammarterm{member-declaration}{s}, -and the innermost enclosing namespace, class, or function. +and the set containing the +innermost enclosing namespace, class, or function. \item If $D$ is a \grammarterm{template-declaration}, the basis is the union of the basis of its \grammarterm{declaration}, the set -consisting of the entities (if any) designated by the default -template template arguments and the default non-type template arguments, +consisting of +the entities (if any) designated by +the default template arguments for +non-type template parameters and template template parameters, the type-bases of the default type template arguments, -and the innermost enclosing namespace, class, or function. +and the set containing the +innermost enclosing namespace, class, or function. Furthermore, if $D$ declares a partial specialization, the basis also includes the primary template. \item If $D$ is an \grammarterm{explicit-instantiation} or an \grammarterm{explicit-specialization}, the basis includes -the primary template, and all the entities in the basis of the +the primary template and all the entities in the basis of the \grammarterm{declaration} of $D$. -\item If $D$ is a \grammarterm{linkage-specification}, the basis is the union -of all the bases of the \grammarterm{declaration}{s} contained in $D$. - \item If $D$ is a \grammarterm{namespace-definition}, the basis comprises the innermost enclosing namespace, if any. @@ -1068,28 +1071,30 @@ \item If $D$ is a \grammarterm{using-declaration}, the basis is the union of the bases of all the declarations introduced by -the \grammarterm{using-declarator}. - -\item If $D$ is a \grammarterm{using-directive}, the basis is the -singleton consisting of the norminated namespace. +the \grammarterm{using-declarator}{s}. -\item If $D$ is an \grammarterm{alias-declaration}, the basis is the type-basis of its \grammarterm{defining-type-id}. +\item If $D$ is an \grammarterm{alias-declaration}, +the basis is the type-basis of its \grammarterm{defining-type-id}. \item Otherwise, the basis is empty. \end{itemize} The \term{type-basis} of a type $T$ is \begin{itemize} -\item If $T$ is a fundamental type, the type-basis is the empty set. \item If $T$ is a cv-qualified type, the type-basis is the type-basis of the unqualified type. \item If $T$ is a member of an unknown specialization, the type-basis is the type-basis of that specialization. \item If $T$ is a class template specialization, the type-basis -is the union of the set consisting of the primary template and the -template template arguments (if any) and the non-dependent non-type -template arguments (if any), and the type-bases of the type -template arguments (if any). +is the set consisting of +\begin{itemize} +\item the primary template, and +\item the entities designated by +non-type template arguments and +template template arguments (if any), and +\item the elements of the type-bases +of the type template arguments (if any). +\end{itemize} \item If $T$ is a class type or an enumeration type, the type-basis is the singleton $\{ T \}$. \item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the @@ -1104,235 +1109,19 @@ \item Otherwise, the type-basis is the empty set. \end{itemize} -% \alinea -% The \term{expr-basis} of an expression $E$ is -% \begin{itemize} -% \item If $E$ is a pair of \grammarterm{expression} separated by a comma, -% the expr-basis is the union of the expr-bases of the two operands. - -% \item If $E$ is an assignment, the expr-basis is the union of the -% expr-bases of the left operand and the right operand, and the set consisting -% of the function implementing the assignment operator (if the left operand -% if of class type) and all the functions involved in the implicit conversion -% sequences applied to the operands. - -% \item If $E$ is a \grammarterm{throw-expression}, the expr-basis is the -% expr-basis of its operand. - -% \item If $E$ is a \grammarterm{conditional-expression}, the expr-basis is the -% union of the expr-bases of all the operands, and the set of functions involved -% in the implicit conversion sequences applied to the operands. - -% \item If $E$ is a binary expression, the expr-basis is the union of the -% expr-bases of the two operands, and the set of functions involved in the -% implicit conversion sequences applied to the operands, and the function -% selected by overload resolution (if any) for the operator. - -% \item If $E$ is an explicit type conversion expression, the expr-basis is -% the union of the type-basis of the target type and the expr-basis of -% the operand expression, and the set consisting of the function or constructor -% involved in performing the conversion to the target type (if any). - -% \item If $E$ is a \grammarterm{noexcept-expression}, -% the expr-basis is the expr-basis of the operand. - -% \item If $E$ is an alignof expression, -% the expr-basis is the type-basis of that operand. - -% \item If $E$ is a \grammarterm{delete-expression}, the expr-basis is -% the union of the expr-basis of the operand and the set consisting of -% the functions inolved in the implicit conversion sequence -% applied to the operand, and the deallocation function selected. - -% \item If $E$ is a \grammarterm{new-expression}, the expr-basis is -% the union of -% \begin{itemize} -% \item the expr-bases of the expressions in its -% \grammarterm{new-placement} (if any), and the set of -% functions involved in the implicit conversion sequences applied -% to those expressions (if any), and the allocation function selected -% \item the type-basis of the \grammarterm{type-specifier-seq} contained -% in the \grammarterm{new-type-id}, the expr-bases of the expressions -% contained in the \grammarterm{new-declarator} (if any), and the set -% consisting of the functions involved in the implicit conversion sequences -% applied to those expressions -% \item the expr-bases of the expressions contained in the -% \grammarterm{new-initializer} (if any), and the set consisting of the -% functions involved in the implicit conversion sequences applied -% to those expressions and the constructor selected (if any) -% \end{itemize} - -% \item If $E$ is a sizeof expression, the expr-basis is the expr-basis -% of the operand if the operand is an expression, otherwise the type-basis -% of the operand. - -% \item If $E$ is prefix expression or a postfix expression, the expr-basis -% is the expr-basis of the operand, and the set consisting of the -% operator function selected by overload resolution (if any). - -% \item If $E$ is a pointer to member expression, the expr-basis is the -% set consisting of the designated non-static member. - -% \item If $E$ is any other unary expression, the expr-basis is the -% union of the expr-basis of the operand expression, and the set -% consisting of the operator function (if any) selected by overload -% resolution and any functions involved in the implicit conversion -% sequence applied to the operand expression. - -% \item if $E$ is a \grammarterm{postfix-expression} -% \begin{itemize} -% \item and is a typeid expression, the expr-basis is the -% type-basis of the type operand if the operand is a type, or the -% expr-basis of the expression operand - -% \item and is a cast expression, the expr-basis is the union of the -% the type-basis of the target type, the expr-basis of the expression operand, -% and the set consisting of function or constructor involved in the -% conversion of the expression operand to the target type - -% \item and is a postifx increment or decrement expression, the expr-basis is -% the expr-basis of the operand expression, and the set consisting of the -% operator function (if any) selected by overload resolution - -% \item and is a pseudo destructor call, the expr-basis is the expr-basis -% of the left-hand side of the dot or arrow operator - -% \item and is a class member access expression, the expr-basis is the union -% of the left-hand expression operand of the dot or the arrow operator, -% and (if that left-hand side is not type-dependent) the set consisting of -% the class member designated by the \grammarterm{id-expression}, the -% operator function selected by overload resolution for the member access -% operator - -% \item and is a function call expression, the expr-basis is the union of -% the expr-basis of the \grammarterm{postfix-expression}, the expr-bases -% of the arguments (if any), and the set consisting of the operator function -% implementing the call selected by overload resolution, all the functions -% involved in the implicit conversion sequences applied to each argument -% in the call - -% \item and is a subscripting expression, the expr-basis is the union of -% the expr-basis of the \grammarterm{postfix-expression}, and the expr-bases -% of each expression in the \grammarterm{expr-or-braced-init-list} - -% \item otherwise, the expr-basis is the empty set. -% \end{itemize} - -% \item If $E$ is a primay expression, -% \begin{itemize} -% \item and is a literal, the expr-basis is... -% \item and is an \grammarterm{id-expression}, the expr-basis is the set -% consisting of the designated entity (if it has namespace scope -% or class scope) or the non-static class member; otherwise the class is empty -% \item and is a parentesized expression, the expr-basis is the expr-basis -% of that expression -% \item and is a lambda expression, the expr-basis is the union of -% \begin{itemize} -% \item the type-bases in the parameter types (if any) -% \item the type-basis of the \grammarterm{trailing-return-type} (if any) -% \item the expr-basis of the \grammarterm{initializer}{s} (if any) -% in its \grammarterm{lambda-capture}. -% \end{itemize} -% \end{itemize} - -% \item Otherwise, the expr-basis is the empty set. - -% \end{itemize} - -% The \term{expr-basis} of an expression $E$ is -% \begin{itemize} -% \item If $E$ is a \grammarterm{literal} -% \begin{itemize} -% \item the set consisting of the literal operator function called, if -% $E$ is a \grammarterm{user-defined-literal}; otherwise -% \item the empty set. -% \end{itemize} - -% \item If $E$ is a parenthesized expression, the expr-basis is the expr-basis -% of that expression. - -% \item If $E$ is a \grammarterm{id-expression} -% \begin{itemize} -% \item the set consisting of the designated destructor, -% if $E$ denotes a destructor; otherwise, -% \item the union of the set consisting of the template, the template -% template-arguments (if any), the type-bases of the type -% template-argumnts (if any), the expr-bases of the non-type -% template-arguments (if any), if $E$ is a \grammarterm{template-id}; otherwise, -% \item the set consisting of the namespace scope or class scope entity -% designated by $E$ if $E$ denotes such an entity; otherwise, -% \item the empty set. -% \end{itemize} - -% \item If $E$ is a \grammarterm{lambda-expression}, the union of -% \begin{itemize} -% \item the type-bases in the parameter types (if any) -% \item the type-basis of the \grammarterm{trailing-return-type} (if any) -% \item the expr-basis of the expressions in the -% \grammarterm{initializer}{s} (if any) -% in its \grammarterm{lambda-capture}. -% \end{itemize} - -% \item If $E$ is a \grammarterm{fold-expression}, the union -% of the expr-bases of the operands, and the set of operator functions -% found by name lookup for the \grammarterm{fold-operator}{s} in the -% context of $E$. - -% \item The empty set, if $E$ is any other \grammarterm{primary-expression}. - -% \item If $E$ is a subscripting expression, the union of the expr-basis -% of the \grammarterm{postfix-expression}, the expr-bases of the -% expressions contained in the \grammarterm{expr-or-braced-init-list}, and -% the set consisting of the selected overloaded operator function (if any) -% and all functions involved in the implicit conversion sequences (if any) -% applied to those expressions. - -% \item If $E$ is a function call expression, the union of the expr-basis -% of the \grammarterm{postfix-expression}, the expr-bases of the expressions -% in the argument list, the set consisting of the selected overloaded function -% operator (if any) and the functions involved in the -% implicit conversion sequences (if any) applied to the arguments, -% and the set of functions found by name lookup in the context of $E$ if -% the \grammarterm{postfix-expression} is a dependent name. - -% \item If $E$ is an explicit type conversion using functional notation, -% the union of the type-basis of the target type, the expr-bases of the -% expressions in the \grammarterm{expression-list} or -% \grammarterm{brace-init-list}, the set consisting of the -% constructor selected (if any) and all functions involved in -% the implicit conversion sequences (if any) applied to the arguments. - -% \item If $E$ is a member selection expression, the union of the expr-basis -% of the \grammarterm{postfix-expression} and the set consisting of -% the overloaded function operator (if any) and the entity member (if any) -% designated by the \grammarterm{id-expression}. - -% \item If $E$ is a named cast expression, the union of the type-basis -% of the target type, the expr-basis of the operand expression, the -% set consisting of the function or constructor selected to perform -% the conversion and the function involved in the implicit conversion -% sequence (if any) applied to the operand. - -% \item If $E$ is a post-increment or post-decrement expression, the -% union of the expr-basis of the \grammarterm{postfix-expression}, and the -% set consisting the selected function operator (if any). - -% \item If $E$ is a pseudo destructor call, the expr-basis of -% the \grammartem{postfix-expression}. - -% \item If $E$ is a typeid expression, the expr-basis of the operand if -% that operand is an expression, otherwise the type-basis of that operand. - -% \item The empty set, if $E$ is any other -% \grammarterm{postfix-expression}. - -% \item Otherwise, the empty set. -%\end{itemize} +A non-type template argument for a template parameter of pointer type +that is not value-dependent designates the entity (if any) that the +pointer points to. +A non-type template argument for a template parameter of reference type +that is not value-dependent designates the entity that the argument +denotes. +Other non-type template arguments do not designate an entity. \alinea -\enternote -The basis of a declaration includes neither non-fully-evaluated expressions nor -entities used in those expressions. +\begin{note} +The basis of a declaration +does not include entities used in expressions, +other than those designated by non-type template arguments. \begin{example} \begin{codeblock} const int size = 2; @@ -1348,7 +1137,7 @@ S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2}, \mathtt{::} \}$ \end{codeblock} \end{example} -\exitnote +\end{note} \alinea A declaration from a global module fragment is \term{referenced} @@ -1392,7 +1181,7 @@ During the implicit definition of a defaulted special member function (\stdref{special}{10.2.3}), the instantiation context is the union of -the instantiation context of the definition of the class and +the instantiation context from the definition of the class and the instantiation context of the program construct that resulted in the implicit definition of the special member function. From f13f21cfe85b52fca6ca6295cf0f3be1d3924989 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 9 Nov 2018 00:14:47 -0800 Subject: [PATCH 38/77] Redefine 'referenced' for clarity, with assistance from Davis. --- src/declarations.tex | 63 +++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index 8ef535d..fe7e928 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -1046,16 +1046,23 @@ \item If $D$ is a \grammarterm{template-declaration}, the basis is the union -of the basis of its \grammarterm{declaration}, the set -consisting of -the entities (if any) designated by +of +\begin{itemize} +\item +the basis of its \grammarterm{declaration}, +\item +the set of entities (if any) designated by the default template arguments for non-type template parameters and template template parameters, +\item the type-bases of the default type template arguments, -and the set containing the -innermost enclosing namespace, class, or function. -Furthermore, if $D$ declares a partial specialization, -the basis also includes the primary template. +\item +the set containing the +innermost enclosing namespace, class, or function, and +\item +if $D$ declares a partial specialization, +the set containing the primary template. +\end{itemize} \item If $D$ is an \grammarterm{explicit-instantiation} or an \grammarterm{explicit-specialization}, the basis includes @@ -1140,28 +1147,36 @@ \end{note} \alinea -A declaration from a global module fragment is \term{referenced} -by the enclosing module unit $M$ if it is +The \term{interface purview} of a module unit +is its purview excluding any \grammarterm{private-module-fragment}. + +\alinea +Certain declarations in a global module fragment are \term{referenced}. +Given an +\grammarterm{identifier}, +\grammarterm{unqualified-id}, +or expression +in an interface purview or +in a template instantiation whose point of instantiation is in that interface purview: \begin{itemize} \item -the unique result of name lookup for an -\grammarterm{unqualified-id} or \grammarterm{identifier} in $M$ -or in a template instantiation whose point of instantiation is in $M$ -and is not within a \grammarterm{private-module-fragment}, or -\item -a function named by an expression (\ref{basic.def.odr}) in $M$ -or in a template instantiation whose point of instantiation is in $M$ -and is not within a \grammarterm{private-module-fragment}, or +For an \grammarterm{identifier} or \grammarterm{unqualified-id}, +if name lookup for it finds a unique result, +the declaration found is referenced. \item -a lookup result for a dependent name that appears in $M$ -and not within a \grammarterm{private-module-fragment} -(\stdref{temp.dep.res}{12.7.4}) -and -that is visible at the point of definition of the enclosing template, or +For an expression, +the declarations of any function named by it are referenced. \item -a declaration of an entity that is in the basis of a declaration referenced -by $M$, recursively. +For an expression that governs name lookup for a dependent name, +consider an expression synthesized from it +by replacing each type-dependent argument +with a value of a placeholder type +with no associated namespaces or entities. +All declarations found by name lookup +for the corresponding name +in the synthesized expression are referenced. \end{itemize} +The declarations of entities in the basis of a referenced declaration are referenced, recursively. \end{std.txt} \rSec2[dcl.module.context]{Instantiation context} From d3418c15cc163b13858a9554c71e7fdaa01fe9fb Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 9 Nov 2018 00:29:28 -0800 Subject: [PATCH 39/77] More Davis review fixes. --- src/declarations.tex | 24 +++--------------------- src/macros.tex | 4 ++-- src/templates.tex | 10 +++++----- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index fe7e928..d8a6dce 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -332,23 +332,7 @@ %\end{after} \alinea -%\begin{before}\color{addclr} -% The subgraph of the abstract semantics graph $G$ of a module $M$ -% generated by the nodes of $G$, excluding those introducing names -% with internal linkage, is available to name lookup in the purview of every -% module implementation unit of $M$. -% The declsets made available by the \grammarterm{module-import-declaration}{s} -% in the purview of -% %\begin{before} -% the module interface unit of $M$ -% %\end{before} -% %\begin{after} -% %the module interface units of $M$ -% %\end{after} -% are also available to name lookup in the purview of all -% module implementation units of $M$. -%\end{before} -\begin{after}\color{addclr} +\color{addclr} A \grammarterm{module-declaration} that contains neither \tcode{export} nor a \grammarterm{module-partition} @@ -387,7 +371,6 @@ int &c = n; // OK \end{codeblock} \end{example} -\end{after} \end{std.txt} \rSec2[dcl.module.interface]{Export declaration}% @@ -728,9 +711,8 @@ A declaration of a name with internal linkage is permitted within a header unit despite all declarations being implicitly exported. - If such a name is - odr-used by a translation unit outside the - header unit, or by an instantiation unit for a template + If such a name is odr-used outside the + header unit, or by a template instantiation whose point of instantiation is outside the header unit, the program is ill-formed. diff --git a/src/macros.tex b/src/macros.tex index e297500..43515aa 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -519,9 +519,9 @@ %\end{tcolorbox} %} -\newenvironment{after}{ +\newenvironment{after}{% %\begin{tcolorbox}[colback=green!5!white,colframe=green!75!black,title=After] -}{ +}{% %\end{tcolorbox} } diff --git a/src/templates.tex b/src/templates.tex index dcd0360..9bbeecc 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -180,18 +180,18 @@ } // module interface unit of \tcode{C2} -export module C1; +export module C2; import B; import ; export template -void h(T t) { +void j(T t) { g(std::string{ }, t); } // translation unit -import C1; -void i() { - h(0); // OK, '+' found in instantiation context: +import C2; +void k() { + j(0); // OK, '+' found in instantiation context: // visible at end of module interface unit of \tcode{C2} } \end{codeblock} From 15d5b691e683caf56e0f59defa9aacbe5b7091e2 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 9 Nov 2018 00:35:32 -0800 Subject: [PATCH 40/77] Remove "directly or indirectly" whose only purpose was to confuse Davis. --- src/declarations.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarations.tex b/src/declarations.tex index d8a6dce..53595d1 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -1269,7 +1269,7 @@ it is a module interface unit on which the translation unit containing the program point has an interface dependency, or it is a translation unit that the translation unit containing the -program point directly or indirectly imports, +program point imports, prior to that program point (\ref{dcl.module.import}). \enternote While module interface units are reachable even when they are only From 2100c650d6f2c911fe057c99d1a9fd06a6e6983c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 9 Nov 2018 00:40:23 -0800 Subject: [PATCH 41/77] From Hubert: specify what an import of a header does. --- src/declarations.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarations.tex b/src/declarations.tex index 53595d1..3816571 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -687,7 +687,7 @@ a synthesized \term{header unit}, which is a translation unit formed by applying phases 1 to 7 of translation (\stdref{lex.phases}{5.2}) - to the source file nominated by $H$, + to the source file or header nominated by $H$, which shall not contain a \grammarterm{module-declaration}. \enternote All declarations within a header unit are implicitly From 3fdb54ccbb94e74cdd4fa10cf9fa74b9c89b007e Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sat, 10 Nov 2018 15:06:42 -0800 Subject: [PATCH 42/77] Updates based on CWG review. --- src/basic.tex | 121 ++++++++++++++++++++++++------------------- src/declarations.tex | 36 ++++++++----- src/lexical.tex | 11 ++-- 3 files changed, 101 insertions(+), 67 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index a7cf2f0..97f6c5c 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -18,6 +18,10 @@ \rSec1[basic.def.odr]{One-definition rule} +\textbf{\color{red}FIXME: Incidental reachability (allowed +by the semantic boundaries rule) should not render a program +ill-formed.} + Change paragraph 6.2/1 as follows: \begin{std.txt} \resetalinea[0] @@ -30,6 +34,24 @@ (\ref{dcl.module.reach})}. \end{std.txt} +\textbf{\color{red}FIXME: Should we allow multiple definitions +of entities with module linkage now that we have module partitions?} + +\begin{example} +\begin{codeblock} +// TU 1 +module A; +class X {}; +void f(X x) { /*...*/ } + +// TU 2 +module A; +class X {}; +void f(X x); +void g() { X x; f(x); } +\end{codeblock} +\end{example} + Modify opening of paragraph 6.2/6 as follows \begin{std.txt} @@ -63,7 +85,7 @@ \begin{after} \added{There shall not be more than one definition of an entity with external linkage - that is attached to a named module; + that is attached to a named module (\ref{dcl.module.unit}); no diagnostic is required unless a prior definition is reachable at a point where a later definition appears.} \end{after} @@ -108,7 +130,7 @@ \end{before} \begin{after} \added{% -If a translation unit $M$ is imported into a translation unit $N$, +If a translation unit $M$ is imported into a translation unit $N$ (\ref{dcl.module.import}), the potential scope of a name $X$ declared with namespace scope in $M$ is extended to include the portion of the corresponding namespace scope in $N$ following the first \grammarterm{module-import-declaration} @@ -117,8 +139,8 @@ } \color{addclr} \begin{itemize} \item \added{$X$ does not have internal linkage, and} -\item \added{$X$ is declared after the \grammarterm{module-declaration} in $M$, and} -\item \added{either $M$ and $N$ are part of the same module or $X$ is exported.} +\item \added{$X$ is declared after the \grammarterm{module-declaration} in $M$ (if any), and} +\item \added{either $X$ is exported or $M$ and $N$ are part of the same module.} \end{itemize} \end{after} \color{addclr} @@ -130,9 +152,8 @@ A \grammarterm{module-import-declaration} imports both the named translation unit(s) and any modules named by exported \grammarterm{module-import-declaration}{s} within them, - recursively (\ref{dcl.module.import}). - \exitnote} - \enterexample + recursively. + \enterexample} \begin{codeblock} // Translation unit \#1 export module M; @@ -144,9 +165,11 @@ // Translation unit \#3 import N; - int main() { return sq(9); } // OK: 'sq' from module M + int main() { return sq(9); } // OK: \tcode{sq} from module \tcode{M} \end{codeblock} + \added{ \exitexample + \exitnote} \end{std.txt} @@ -164,16 +187,7 @@ wherever the grammar allows such names in the context discussed by a particular rule. Name lookup associates the use of a name with a set of declarations (6.1) -\begin{before} - \added{or citations (\ref{dcl.module.import})} -\end{before} of that name. -\begin{before} -%%% FIXME: If we keep this, fix the typo "intent" -> "intents" - \added{For all intent and purposes of further semantic processing - requiring declarations, - a citation is replaced with the declarations contained in its declset.} -\end{before} [...] Only after name lookup, function overload resolution (if applicable) and access checking have succeeded are the \removed{attributes}\added{semantic properties} introduced by @@ -296,9 +310,9 @@ \item[---] \added{Any function or function template in the interface of a named module \tcode{M} (\ref{dcl.module}) that has - the same innermost enclosing non-inline namespace as some entity - attached to \tcode{M} in the set of associated entities is visible - within its namespace + the same innermost enclosing non-inline namespace as + some associated entity attached to \tcode{M} + is visible within its namespace to a lookup that does not occur within a module unit of \tcode{M}, even if it is not visible during an ordinary lookup.} @@ -309,6 +323,8 @@ excluding discarded declarations (\ref{dcl.module.global}) and internal linkage declarations attached to the global module.} \end{itemize} + +\textbf{\color{red}FIXME: Add an example.} \end{std.txt} \setcounter{section}{4} @@ -322,13 +338,7 @@ \begin{bnf} \nonterminal{translation-unit}:\br \added{top-level-}declaration-seq\opt\br - \added{preamble top-level-declaration-seq\opt private-module-fragment\opt} -\end{bnf} - -\begin{bnf} -\added{\nonterminal{preamble}:\br - global-module-fragment\opt module-declaration\br - preamble module-import-declaration} + \added{global-module-fragment\opt module-declaration top-level-declaration-seq\opt private-module-fragment\opt} \end{bnf} \begin{bnf} @@ -337,13 +347,13 @@ \end{bnf} \begin{bnf}\color{addclr} - \added{\nonterminal{top-level-declaration-seq}\br + \added{\nonterminal{top-level-declaration-seq}:\br top-level-declaration\br top-level-declaration-seq top-level-declaration} \end{bnf} \begin{bnf}\color{addclr} - \added{\nonterminal{top-level-declaration}\br + \added{\nonterminal{top-level-declaration}:\br module-import-declaration\br declaration} \end{bnf} @@ -353,11 +363,7 @@ \begin{std.txt} \alinea -\added{The \grammarterm{preamble} includes the longest possible sequence of -\grammarterm{module-import-declaration}{s}.} - -\alinea -\added{A \grammarterm{private-module-fragment} shall only appear +\added{A \grammarterm{private-module-fragment} shall appear only in a primary module interface unit (\ref{dcl.module.unit}).} \alinea @@ -394,7 +400,7 @@ unless} \begin{itemize} \color{addclr} - \item[---] \added{it is declared \tcode{extern}, or} + \item[---] \added{it is explicitly declared \tcode{extern}, or} \item[---] \added{it is inline or exported, or} \item[---] \added{it was previously declared and the prior declaration did not have internal linkage; or} @@ -459,7 +465,8 @@ \item \added{if the enclosing namespace has internal linkage, the name has internal linkage;} \item \added{otherwise, if - the declaration of the name is attached to a named module + the declaration of the name is + attached to a named module (\ref{dcl.module.unit}) and is not exported (\ref{dcl.module.interface}), %and is not declared in a %\grammarterm{proclaimed-ownership-declaration} or a @@ -531,12 +538,15 @@ \color{addclr} \begin{example} \begin{codeblock} - // module interface of M - module; - int f(); // \#1 + // \tcode{"decls.h"} + int f(); // \#1, attached to the global module int g(); // \#2, attached to the global module + + // module interface of \tcode{M} + module; + #include "decls.h" export module M; - export using ::f; // OK: does not declare an entity + export using ::f; // OK: does not declare an entity, exports \#1 int g(); // error: matches \#2, but attached to M export int h(); // \#3 export int k(); // \#4 @@ -548,28 +558,35 @@ \end{codeblock} \end{example} \added{As a consequence of these rules, - all declarations of an entity are attached to the same module; + all declarations of an entity are \term{attached} to the same module; the entity is said to be attached to that module.} \end{std.txt} -\setcounter{section}{5} -\rSec1[basic.start]{Start and termination} +\setcounter{section}{7} +\rSec1[basic.exec]{Program execution} -\setcounter{subsection}{0} -\rSec2[basic.start.main]{\tcode{main} function} +\setcounter{subsection}{2} +\rSec2[basic.start]{Start and termination} -Modify paragraph 6.6.1/1 as follows: +\setcounter{subsubsection}{0} +\rSec3[basic.start.main]{\tcode{main} function} + +Modify paragraph 6.8.3.1/1 as follows: \begin{std.txt} \resetalinea[0] \alinea A program shall contain a global function called \tcode{main} - % This is a semantic requirement not a syntactic one, so should use ownership not purview. - \begin{before} - \added{declared in the purview of the global module}. - \end{before} - \begin{after} \added{attached to the global module}. - \end{after} \end{std.txt} +Modify paragraph 6.8.3.1/3 as follows: +\begin{std.txt} + \resetalinea[2] + \alinea + ... + A program that declares a variable \tcode{main} at global scope\added{, + or that declares a function \tcode{main} at global scope attached to a named module,} + or that declares the name \tcode{main} with C language linkage (in any namespace) + is ill-formed. +\end{std.txt} diff --git a/src/declarations.tex b/src/declarations.tex index 3816571..553771f 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -37,11 +37,15 @@ \begin{std.txt} \resetalinea[5] \alinea - \added{Some definition for} - \removed{A}\added{a}n inline function or variable shall be - \removed{defined}\added{reachable} in every translation - unit in which it is odr-used and \added{the function or variable} shall have exactly - the same definition in every case (\ref{basic.link}). + \removed{An} + \added{If an} + inline function or variable + \added{is odr-used in a} + \removed{shall be defined in every} + translation unit\added{, + a definition of it shall be reachable from the end of that translation unit,} + \removed{in which it is odr-used} and \added{it} shall have exactly + the same definition in every \added{such translation unit} \removed{case} (\ref{basic.link}). \enternote A call to the inline function or a use of the inline variable may be encountered before its definition appears @@ -144,6 +148,8 @@ \noindent Add a new subclause 9.11 titled ``\textbf{Modules}'' as follows: +\textbf{\color{red}FIXME: Move to a top-level clause, per CWG request} + \setcounter{section}{10} \rSec1[dcl.module]{Modules}% @@ -435,8 +441,12 @@ \begin{example} \begin{after}\color{addclr} \begin{codeblock} - module; + // \tcode{"a.h"} export int x; // error: not in the purview of a module interface unit + + // TU 1 + module; + #include "a.h" export module M; namespace { export int a; // error: export within unnamed namespace @@ -654,8 +664,10 @@ \alinea A \grammarterm{module-import-declaration} shall appear only at global scope, and not in a \grammarterm{linkage-specification}. - In a module unit, a \grammarterm{module-import-declaration} shall - appear only within the \grammarterm{preamble}. + In a module unit, all \grammarterm{module-import-declaration}{s} + shall precede all other \grammarterm{top-level-declaration}{s} in + the \grammarterm{top-level-declaration-seq} of the + \grammarterm{translation-unit}. \alinea A \grammarterm{module-import-declaration} \term{imports} a set of @@ -947,7 +959,7 @@ \begin{std.txt}\color{addclr} \begin{bnf} \nonterminal{global-module-fragment}:\br - \terminal{module} \terminal{;} top-level-declaration-seq + \terminal{module} \terminal{;} top-level-declaration-seq\opt \end{bnf} \resetalinea[0] @@ -974,7 +986,7 @@ \end{note} \begin{example} \begin{codeblock} -// header "foo.h" +// \tcode{"foo.h"} namespace N { struct X {}; int f(X); @@ -982,7 +994,7 @@ int h(X); } -// module M interface +// module \tcode{M} interface module; #include "foo.h" export module M; @@ -997,7 +1009,7 @@ template int use_h() { N::X x; h((T(), x)); } int k = use_h(); -// module M implementation +// module \tcode{M} implementation module M; int a = use_f(); // ok int b = use_g(); // error: no viable function for call to \tcode{g} diff --git a/src/lexical.tex b/src/lexical.tex index daa785e..f932ff8 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -43,7 +43,8 @@ \added{It is implementation-defined whether the sources for module units and header units on which the current translation unit has an interface - dependency (\ref{dcl.module.import}) are required to be available.} + dependency (\ref{dcl.module.unit}, \ref{dcl.module.import}) + are required to be available.} \enternote Source files, translation units and translated translation units need not necessarily be stored as files, nor need there be any one-to-one @@ -58,6 +59,10 @@ \setcounter{section}{3} \Sec1[lex.pptoken]{Preprocessing tokens} +\textbf{\color{red}FIXME: The following change is a placeholder; the final rule for +context-sensitive lexing of \grammarterm{header-name} tokens +after \tcode{import} tokens is still under development.} + Modify bullet 3 of paragraph 5.4/3 as follows: \begin{std.txt} @@ -82,8 +87,8 @@ ``Identifiers with special meaning'': \begin{std.txt} -\added{module}\\ -\added{import} +\added{\tcode{module}}\\ +\added{\tcode{import}} \end{std.txt} \setcounter{section}{10} From 270c3d06c2e27fb2eb13fc271e0f1473915215a8 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sat, 10 Nov 2018 15:15:48 -0800 Subject: [PATCH 43/77] Move [dcl.module] to a top-level clause [module] --- src/basic.tex | 30 +- src/declarations.tex | 1441 +----------------------------------------- src/lexical.tex | 2 +- src/preprocessor.tex | 4 +- src/templates.tex | 2 +- src/ts.tex | 1 + 6 files changed, 21 insertions(+), 1459 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 97f6c5c..de91067 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -31,7 +31,7 @@ \added{A} variable, function, class type, enumeration type, or template \added{shall not be defined where a prior definition is reachable - (\ref{dcl.module.reach})}. + (\ref{module.reach})}. \end{std.txt} \textbf{\color{red}FIXME: Should we allow multiple definitions @@ -69,7 +69,7 @@ specified (12.8, 12.6.5) in a program provided that \removed{each definition appears in a different translation unit} - \added{no prior definition is reachable (\ref{dcl.module.reach}) + \added{no prior definition is reachable (\ref{module.reach}) at the point where a definition appears}, and provided the definitions satisfy the following requirements. @@ -85,7 +85,7 @@ \begin{after} \added{There shall not be more than one definition of an entity with external linkage - that is attached to a named module (\ref{dcl.module.unit}); + that is attached to a named module (\ref{module.unit}); no diagnostic is required unless a prior definition is reachable at a point where a later definition appears.} \end{after} @@ -130,7 +130,7 @@ \end{before} \begin{after} \added{% -If a translation unit $M$ is imported into a translation unit $N$ (\ref{dcl.module.import}), +If a translation unit $M$ is imported into a translation unit $N$ (\ref{module.import}), the potential scope of a name $X$ declared with namespace scope in $M$ is extended to include the portion of the corresponding namespace scope in $N$ following the first \grammarterm{module-import-declaration} @@ -192,11 +192,11 @@ and access checking have succeeded are the \removed{attributes}\added{semantic properties} introduced by the name's declaration - \added{and its reachable (\ref{dcl.module.reach}) redeclarations} + \added{and its reachable (\ref{module.reach}) redeclarations} used further in the expression processing (Clause 7). \end{std.txt} -% Moved to dcl.module.reach with some changes. +% Moved to module.reach with some changes. \begin{before} Add new paragraph 6.4/5 as follows: \begin{std.txt}\color{addclr} @@ -309,7 +309,7 @@ \color{addclr} \item[---] \added{Any function or function template in the interface of - a named module \tcode{M} (\ref{dcl.module}) that has + a named module \tcode{M} (\ref{module}) that has the same innermost enclosing non-inline namespace as some associated entity attached to \tcode{M} is visible within its namespace @@ -318,9 +318,9 @@ \item[---] \added{All declarations that are visible at any point in the instantiation - context (\ref{dcl.module.context}) of the lookup are visible + context (\ref{module.context}) of the lookup are visible even if they are not visible during an ordinary lookup, - excluding discarded declarations (\ref{dcl.module.global}) and + excluding discarded declarations (\ref{module.global}) and internal linkage declarations attached to the global module.} \end{itemize} @@ -364,7 +364,7 @@ \begin{std.txt} \alinea \added{A \grammarterm{private-module-fragment} shall appear only -in a primary module interface unit (\ref{dcl.module.unit}).} +in a primary module interface unit (\ref{module.unit}).} \alinea \added{A token sequence beginning with @@ -382,7 +382,7 @@ \begin{itemize} \item[---] \added{When a name has \term{module linkage}, the entity it denotes can be referred to by names - from other scopes of the same module unit (\ref{dcl.module.unit}) + from other scopes of the same module unit (\ref{module.unit}) or from scopes of other module units of that same module.} \end{itemize} @@ -452,10 +452,10 @@ \added{has the same linkage as the enclosing namespace if} \begin{itemize} \item \added{said namespace has internal linkage, or} - \item \added{the name is exported (\ref{dcl.module.interface}), or} + \item \added{the name is exported (\ref{module.interface}), or} \added{is declared in a \grammarterm{proclaimed-ownership-declaration}, or is not being declared in the purview of - a named module (\ref{dcl.module.unit});} + a named module (\ref{module.unit});} \end{itemize} \added{otherwise, the name has module linkage.} \end{before} @@ -466,8 +466,8 @@ the name has internal linkage;} \item \added{otherwise, if the declaration of the name is - attached to a named module (\ref{dcl.module.unit}) - and is not exported (\ref{dcl.module.interface}), + attached to a named module (\ref{module.unit}) + and is not exported (\ref{module.interface}), %and is not declared in a %\grammarterm{proclaimed-ownership-declaration} or a %\grammarterm{linkage-specification}, diff --git a/src/declarations.tex b/src/declarations.tex index 553771f..3a85e59 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -129,7 +129,7 @@ \added{\enternote A namespace name with external linkage is exported if any of its \term{namespace-definition}{s} is exported, or if it contains any - \grammarterm{export-declaration}{s} (\ref{dcl.module.interface}). + \grammarterm{export-declaration}{s} (\ref{module.interface}). A namespace is never attached to a module, and never has module linkage even if it is not exported. \exitnote} @@ -144,1442 +144,3 @@ \end{example} \end{after} \end{std.txt} - -\noindent -Add a new subclause 9.11 titled ``\textbf{Modules}'' as follows: - -\textbf{\color{red}FIXME: Move to a top-level clause, per CWG request} - -\setcounter{section}{10} -\rSec1[dcl.module]{Modules}% - -\rSec2[dcl.module.unit]{Module units and purviews} - -\begin{std.txt}\color{addclr} -\begin{before}\color{addclr} -\begin{bnf} -\nonterminal{module-declaration}:\br - \terminal{export}\opt{} \terminal{module} module-name attribute-specifier-seq\opt{} \terminal{;} -\end{bnf} -\end{before}\begin{after}\color{addclr} -\begin{bnf} -\nonterminal{module-declaration}:\br - \terminal{export}\opt{} \terminal{module} module-name module-partition\opt{} attribute-specifier-seq\opt{} \terminal{;} -\end{bnf} -\end{after} - - \begin{bnf}\color{addclr} - \nonterminal{module-name}:\br - module-name-qualifier\opt identifier - \end{bnf} - - \begin{after} - \begin{bnf}\color{addclr} - \nonterminal{module-partition}:\br - \terminal{:} module-name-qualifier\opt identifier - \end{bnf} - \end{after} - - \begin{bnf}\color{addclr} - \nonterminal{module-name-qualifier}:\br - identifier \terminal{.}\br - module-name-qualifier identifier \terminal{.} - \end{bnf} - - \resetalinea[0] -\alinea A \term{module unit} is a translation unit that contains -a \grammarterm{module-declaration}. A \term{named module} is the -collection of module units with the same \grammarterm{module-name}. -\begin{after}\color{addclr} -Two \grammarterm{module-name}{s} are the same if they are -composed of the same dotted sequence of \grammarterm{identifier}{s}. -\end{after} -\begin{before}\color{addclr} -% This follows from the grammar now. -A translation unit shall not contain more than -one \grammarterm{module-declaration}. -% Modules aren't entities and don't have linkage. -A \grammarterm{module-name} -has external linkage but cannot be found by name lookup. -\end{before} - -\alinea -A \term{module interface unit} is a module unit whose -\grammarterm{module-declaration} contains the \texttt{export} keyword; -any other module unit is a \term{module implementation unit}. -\begin{before}\color{addclr} -A named module shall contain exactly one module interface unit. -\end{before} -\begin{after}\color{addclr} -A named module shall contain exactly one module interface unit -with no \grammarterm{module-partition}, known as the -\term{primary module interface unit} of the module. -\end{after} - -\begin{after}\color{addclr} -\alinea -A \term{module partition} is -a module unit whose \grammarterm{module-declaration} contains -a \grammarterm{module-partition}. -A named module shall not contain multiple module partitions with -the same dotted sequence of \grammarterm{identifier}{s} in their -\grammarterm{module-partition}. -All module partitions of a module -that are module interface units -shall be directly or indirectly exported -by the primary module interface unit (\ref{dcl.module.import}). -No diagnostic is required for a violation of these rules. -\enternote -Module partitions can only be imported by -other module units in the same module. -The division of a module into module units -is not visible outside the module. -\exitnote -\end{after} - -\begin{after}\color{addclr} -\alinea -\begin{example} -\begin{codeblock} -// TU 1 -export module A; -export import :Foo; -export int baz(); -\end{codeblock} - -\begin{codeblock} -// TU 2 -export module A:Foo; -import :Internals; -export int foo() { return 2 * (bar() + 1); } -\end{codeblock} - -\begin{codeblock} -// TU 3 -module A:Internals; -int bar(); -\end{codeblock} - -\begin{codeblock} -// TU 4 -module A; -import :Internals; -int bar() { return baz() - 10; } -int baz() { return 30; } -\end{codeblock} - -Module \tcode{A} contains four translation units: -\begin{itemize} -\item a primary module interface unit, -\item a module partition \tcode{A:Foo}, which is a module interface unit -forming part of the interface of module \tcode{A}, -\item a module partition \tcode{A:Internals}, which does not contribute -to the external interface of module \tcode{A}, and -\item an implementation module unit providing -a definition of \tcode{bar} and \tcode{baz}, -which cannot be imported because -it does not have a partition name. -\end{itemize} -\end{example} -\end{after} - -\alinea -A \term{module unit purview} starts at the \grammarterm{module-declaration} -and extends to the end of the translation unit. -The \term{purview} of a named module \tcode{M} is the set of module unit purviews -of \tcode{M}'s module units. - -\alinea -The \term{global module} is the collection of all declarations -not in the purview of any module. By -extension, such declarations are said to be in the purview of the -global module. -\enternote -The global module has no name, no module interface unit, and is not -introduced by any \grammarterm{module-declaration}. -\exitnote - -\alinea - A \term{module} is either a named module or the global module. - \begin{before}\color{addclr} - A \grammarterm{proclaimed-ownership-declaration} is - \term{attached} to the module it nominates; any other declaration - is attached to the module in whose purview it appears. - \end{before} - \begin{after}\color{addclr} - A declaration is \term{attached} to a module determined as follows: - \begin{itemize}\color{addclr} - \item If the declaration - \begin{itemize}\color{addclr} - \item is a replaceable global allocation or deallocation - function (\stdref{new.delete.single}{21.6.2.1}, \stdref{new.delete.array}{21.6.2.2}), or - \item is a \grammarterm{namespace-declaration} with external linkage, or - \item appears within a \grammarterm{linkage-specification}, - \end{itemize}\color{addclr} - it is attached to the global module. - - \item Otherwise, the declaration is - attached to the module in whose purview it appears. - \end{itemize} - \end{after} - -% Notion of 'ownership' is unused; removed. -% \alinea -% \begin{before}\color{addclr} -%For a namespace-scope declaration $D$ of an entity (other than a -%namespace), if $D$ is within a \grammarterm{proclaimed-ownership-declaration} -%for a module $X$, the entity is said to be \term{owned} by $X$. -%Otherwise, if $D$ is the first declaration of that entity, then that entity is said -%to be \term{owned} by the module in whose purview $D$ appears. -%\end{before} -%\begin{after}\color{addclr} -%An entity introduced at namespace scope is \term{owned} by the -%module to which its first declaration is attached. -%\end{after} - - \alinea -\color{addclr} -A \grammarterm{module-declaration} -that contains neither \tcode{export} -nor a \grammarterm{module-partition} -implicitly imports the primary module interface unit of the module -as if by a \grammarterm{module-import-declaration}. -\begin{example} -\begin{codeblock} -// TU 1 -export module B; -import :Y; // OK, does not create interface dependency cycle -int n = y(); -\end{codeblock} - -\begin{codeblock} -// TU 2 -module B:X1; // does not implicitly import \tcode{B} -int &a = n; // error: \tcode{n} not visible here -\end{codeblock} - -\begin{codeblock} -// TU 3 -module B:X2; // does not implicitly import \tcode{B} -import B; -int &b = n; // OK -\end{codeblock} - -\begin{codeblock} -// TU 4 -module B:Y; // does not implicitly import \tcode{B} -int y(); -\end{codeblock} - -\begin{codeblock} -// TU 5 -module B; // implicitly imports \tcode{B} -int &c = n; // OK -\end{codeblock} -\end{example} -\end{std.txt} - -\rSec2[dcl.module.interface]{Export declaration}% - -\begin{std.txt}\color{addclr} - \begin{bnf}\color{addclr} - \nonterminal{export-declaration}:\br - \terminal{export} declaration\br - \terminal{export} \terminal{\{} declaration-seq${}_{opt}$ \terminal{\}} - \end{bnf} - - \resetalinea[0] - \alinea - An \grammarterm{export-declaration} shall appear only - at namespace scope and only in the purview of a module interface unit. - An \grammarterm{export-declaration} shall not appear directly - or indirectly within an unnamed namespace - or a \grammarterm{private-module-fragment}. - An \grammarterm{export-declaration} - has the declarative effects of its \grammarterm{declaration} - or its \grammarterm{declaration-seq} (if any). - An \grammarterm{export-declaration} does not - establish a scope and its \grammarterm{declaration} - or \grammarterm{declaration-seq} - shall not contain an \grammarterm{export-declaration}. - - \alinea - A declaration is \term{exported} if it is - \begin{itemize}\color{addclr} - \item a namespace-scope declaration declared within an - \grammarterm{export-declaration}, or - \item a \grammarterm{module-import-declaration} declared with - the \tcode{export} keyword (\ref{dcl.module.import}), or - \item a \grammarterm{namespace-definition} that contains an - exported declaration, or - \item a declaration within a header unit (\ref{dcl.module.import}) - that satisfies the rules for an exported declaration below. - \end{itemize} - The \term{interface} of a module \tcode{M} is the set of all - exported declarations within its purview. - \begin{example} - \begin{codeblock} - export module M; - namespace A { // exported - export int f(); // exported - int g(); // not exported - } - \end{codeblock} - The interface of \tcode{M} comprises \tcode{A} and \tcode{A::f}. - \end{example} - - \alinea - An exported declaration shall declare at least one name. - If the declaration is not within a header unit, - it shall not declare a name with internal linkage. - %\grammarterm{decl-specifier-seq} (if any) of the - %\grammarterm{declaration} shall not contain \tcode{static}, - %and the \grammarterm{declaration} shall not be an - %\grammarterm{unnamed-namespace-definition}. - - \alinea - \begin{example} - \begin{after}\color{addclr} - \begin{codeblock} - // \tcode{"a.h"} - export int x; // error: not in the purview of a module interface unit - - // TU 1 - module; - #include "a.h" - export module M; - namespace { - export int a; // error: export within unnamed namespace - } - export static int b; // error: b explicitly declared static - export int f(); // OK - export namespace N { } // OK - export using namespace N; // error: does not declare a name - \end{codeblock} - \end{after} - \end{example} - - \alinea - If the \grammarterm{declaration} is a \grammarterm{using-declaration} - (9.8 [namespace.udecl]), any entity to which the - \grammarterm{using-declarator} ultimately refers shall have been introduced - with a name having external linkage. - \begin{example} - \begin{codeblock} - int f() // f has external linkage - export module M; - export using ::f; // OK - struct S; - export using ::S; // error: S has module linkage - namespace N { - int h(); - static int h(int); // \#1 - } - export using N::h; // error: \#1 has internal linkage - \end{codeblock} - \end{example} - \enternote - Names introduced by \tcode{typedef} declarations - and \grammarterm{alias-declaration}{s} - are not so constrained. - \begin{example} - \begin{codeblock} - export module M; - struct S; - export using T = S; // OK: exports name T denoting type S - \end{codeblock} - \end{example} - \exitnote - - \begin{after}\color{addclr} - \alinea - If a redeclaration is exported - and the first declaration was not exported, - the program is ill-formed. - \begin{example} - \begin{codeblock} - export module M; - struct S { int n; }; - export typedef S S; // OK, not a redeclaration of \tcode{struct S} - export struct S; // error: exported declaration follows non-exported definition - \end{codeblock} - \end{example} - \end{after} - -% \alinea -% An \grammarterm{export-declaration} of the form -% \begin{grammar} -% @\tcode{export}@ @\tcode{\{} \term{declaration-seq${}_{opt}$} \tcode{\}}@ -% \end{grammar} -% is equivalent to a sequence of declarations formed by prefixing each -% \grammarterm{declaration} of the \grammarterm{declaration-seq} (if any) with -% \tcode{export}. - - \alinea - A name is \term{exported} by a module - if it is introduced or redeclared - by an exported declaration in the purview of that module. - %A namespace-scope - %\begin{before}\color{addclr} - %or a class-scope - %\end{before} - %declaration lexically - %contained in an \grammarterm{export-declaration}, as well as the - %entities and the names it introduces are said to be \term{exported}. - %\begin{before}\color{addclr} - %The exported declarations in the interface of a module are reachable from - %any translation unit importing that module. - %\end{before} - \enternote - Exported names have either external linkage or no linkage; see \ref{basic.link}. - \begin{after}\color{addclr} - Namespace-scope names exported by a module are visible to name lookup - in any translation unit importing that module; see \ref{basic.scope.namespace}. - Class and enumeration member names are visible to name lookup in any - context in which a definition of the type is reachable. - \end{after} - \exitnote -% The declarations introducing names with linkage -% other than internal linkage introduced or made reachable -% (via an \grammarterm{import-declaration}) -% in the purview of the module -% interface unit of a -% module \tcode{M} are reachable from the purview of all module -% implementation units -% of \tcode{M}. - \begin{example} - \begin{codeblock} - // Interface unit of M - export module M; - export struct X { - static void f(); - struct Y { }; - }; - - namespace { - struct S { }; - } - export void f(S); // OK - struct T { }; - export T id(T); // OK - - export struct A; // A exported as incomplete - - export auto rootFinder(double a) { - return [=](double x) { return (x + a/x)/2; }; - } - - export const int n = 5; // OK: n has external linkage - - // Implementation unit of M - module M; - struct A { - int value; - }; - - // main program - import M; - int main() { - X::f(); // OK: \tcode{X} is exported and definition of \tcode{X} is reachable - X::Y y; // OK: \tcode{X::Y} is exported as a complete type - auto f = rootFinder(2); // OK - return A{45}.value; // error: \tcode{A} is incomplete - } - \end{codeblock} - \end{example} - - \alinea - \enternote - Redeclaring a name in an \grammarterm{export-declaration} - cannot change the linkage of the name (\ref{basic.link}). - \begin{example} - \begin{codeblock} - // Interface unit of M - export module M; - static int f(); // \#1 - export int f(); // error: \#1 gives internal linkage - struct S; // \#2 - export struct S; // error: \#2 gives module linkage - namespace { - namespace N { - extern int x; // \#3 - } - } - export int N::x; // error: \#3 gives internal linkage - \end{codeblock} - \end{example} - \exitnote -%% If the -%% \term{export-declaration} introduces a function template or a variable -%% template then the type of the corresponding current instantiation shall -%% contain only types with external linkage. If the -%% \term{export-declaration} introduces a template alias then the aliased -%% type shall have external linkage. If the -%% \term{export-declaration} defines a class template, then all -%% non-internal members of the corresponding current instantiation shall -%% contain only types with external linkage. - -%% \alinea -%% In a \grammarterm{exported-fragment-group}, -%% each \grammarterm{fragment} is processed -%% as an exported declaration. - - \alinea - \enternote - Declarations in an exported \grammarterm{namespace-definition} - or in an exported \grammarterm{linkage-specification} (10.5) - are - exported and subject to the rules of exported declarations. - \exitnote - \begin{example} - \begin{codeblock} - export module M; - export namespace N { - int x; // OK - static_assert(1 == 1); // error: does not declare a name - } - \end{codeblock} - \end{example} -\end{std.txt} - - -\rSec2[dcl.module.import]{Import declaration}% - -\begin{std.txt}\color{addclr} -\begin{before} - \begin{bnf}\color{addclr} - \nonterminal{module-import-declaration}:\br - \terminal{import} module-name attribute-specifier-seq\opt {} \terminal{;} - \end{bnf} -\end{before}\begin{after} - \begin{bnf}\color{addclr} - \nonterminal{module-import-declaration}:\br - \terminal{export}\opt{} \terminal{import} module-name attribute-specifier-seq\opt {} \terminal{;}\br - \terminal{export}\opt{} \terminal{import} module-partition attribute-specifier-seq\opt {} \terminal{;}\br - \terminal{export}\opt{} \terminal{import} header-name attribute-specifier-seq\opt {} \terminal{;} - \end{bnf} -\end{after} - - \resetalinea[0] - \alinea - A \grammarterm{module-import-declaration} shall appear only at - global scope, and not in a \grammarterm{linkage-specification}. - In a module unit, all \grammarterm{module-import-declaration}{s} - shall precede all other \grammarterm{top-level-declaration}{s} in - the \grammarterm{top-level-declaration-seq} of the - \grammarterm{translation-unit}. - - \alinea - A \grammarterm{module-import-declaration} \term{imports} a set of - translation units determined as described below. - \enternote - Namespace-scope names exported by the imported translation units - become visible in the importing translation unit (\ref{basic.scope.namespace}) - and declarations within the imported translation units become reachable - in the importing translation unit (\ref{dcl.module.reach}) - after the import declaration. - \exitnote - - \alinea - A \grammarterm{module-import-declaration} that specifies - a \grammarterm{module-name} $M$ - imports all module interface units of $M$. - - \alinea - A \grammarterm{module-import-declaration} that specifies - a \grammarterm{module-partition} shall only appear after - the \grammarterm{module-declaration} in a module unit in - some module $M$. - Such a declaration imports the so-named - \grammarterm{module-partition} of $M$. - - \alinea - A \grammarterm{module-import-declaration} that specifies - a \grammarterm{header-name} $H$ imports - a synthesized \term{header unit}, - which is a translation unit formed by applying - phases 1 to 7 of translation (\stdref{lex.phases}{5.2}) - to the source file or header nominated by $H$, - which shall not contain a \grammarterm{module-declaration}. - \enternote - All declarations within a header unit are implicitly - exported, and are attached to the global module. - \exitnote - $H$ shall identify an importable header; - how the set of importable headers is specified - is implementation-defined. - Two - \grammarterm{module-import-declaration}{s} - import the same header unit if and only if - their \grammarterm{header-name}{s} identify the same - header or source file (\ref{cpp.include}). - \enternote - A \grammarterm{module-import-declaration} nominating - a \grammarterm{header-name} is also recognized by the - preprocessor, and results in macros defined at the - end of phase 4 of translation of the header unit - being made visible as described in \ref{cpp.module}. - \exitnote - A declaration of a name with internal linkage is - permitted within a header unit despite all - declarations being implicitly exported. - If such a name is odr-used outside the - header unit, or by a template - instantiation whose point of instantiation is outside - the header unit, the program is ill-formed. - - \alinea - When a \grammarterm{module-import-declaration} imports - a translation unit $T$, it also imports - all translation units imported by - exported \grammarterm{module-import-declaration}{s} - in $T$; such translation units are - said to be exported by $T$. - When a \grammarterm{module-import-declaration} in a module unit imports - another module unit of the same module, it also imports - all translation units imported by - all \grammarterm{module-import-declaration}{s} - in that module unit. - These rules may in turn lead to the importation of yet more - translation units. - - \alinea - \color{addclr} - A module implementation unit shall not be exported. - \begin{example} - \begin{Program} -// Translation unit \#1 -module M:Part; - -// Translation unit \#2 -export module M; -export import :Part; // error: exported partition \tcode{:Part} is an implementation unit - \end{Program} - \end{example} - -% FIXME -% \alinea -% \begin{after}\color{addclr} -% Importing a translation unit $M$ -% \end{after} -% makes every citation and every -% %\begin{before}\color{addclr} -% exported declaration -% %\end{before} -% %\begin{after}\color{addclr} -% %exported name -% %\end{after} -% from the -% abstract semantics graph of $M$ available, as a citation, -% %makes exported declarations from the interface of the nominated module visible -% to name lookup in -% the current translation unit, in the same namespaces and contexts -% as in $M$. -% % the nominated module. -% \begin{after}\color{addclr} -% If $M$ is part of the same module as the importing translation unit, -% importing $M$ also makes every name declared in the purview of $M$ -% that does not have internal linkage visible to name lookup -% in the current translation unit, in the same namespaces and contexts -% as in $M$. -% \end{after} -% \begin{before}\color{addclr} -% A \term{citation} for a declaration attached to a module $M$ is a pair of -% $M$ and the corresponding declset from the abstract semantics graph -% of $M$. -% \end{before} -% \begin{after}\color{addclr} -% A \term{citation} for a declaration in a translation unit $M$ is a pair of -% $M$ and the corresponding declset from the abstract semantics graph -% of $M$. -% \end{after} -%% The \grammarterm{attribute-specifier-seq} appartain to the nominated module. -% \enternote -% The declarations in the declsets and the entities denoted by the declsets -% are not redeclared in the translation unit -% containing the \grammarterm{module-import-declaration}. -% \exitnote - -% FIXME -% \begin{after}\color{addclr} -% \alinea -% \enternote -% A \grammarterm{module-import-declaration} also makes all -% declarations in the purview of the module interface units of $M$ -% reachable in the current translation unit, and may make declarations -% from the preamble of $M$ reachable in the current translation -% unit, as described in \ref{dcl.module.reach}. -% \exitnote -% \end{after} -% \begin{example} -% \begin{Program} -% // Interface unit of M -% export module M; -% export namespace N { -% struct A { }; -% } -% namespace N { -% struct B { }; -% export struct C { -% friend void f(C) { } // exported, visible only through argument-dependent lookup -% }; -% } -% -% // Translation unit 2 -% import M; -% N::A a { }; // OK. -% N::B b { }; // error: `B' not found in N. -% void h(N::C c) { -% f(c); // OK: `N::f' found via argument-dependent lookup -% N::f(c); // error: `f' not found via qualified lookup in N. -% } -% \end{Program} -% \end{example} - - \alinea - A module implementation unit of a module \tcode{M} - that is not a module partition - shall not contain a \grammarterm{module-import-declaration} - nominating \tcode{M}. - \begin{example} - \begin{codeblock} - module M; - import M; // error: cannot import M in its own unit - \end{codeblock} - \end{example} - - \alinea -\begin{before}\color{addclr} - A module \tcode{M1} \term{has an interface dependency} on a module - \tcode{M2} if the module interface of \tcode{M1} contains a - \grammarterm{module-import-declaration} nominating \tcode{M2}, - or if there exists a module \tcode{M3} such that \tcode{M1} has an - interface dependency on \tcode{M3} and \tcode{M3} has an interface dependency - on \tcode{M2}. A module -\end{before} -\begin{after}\color{addclr} - A translation unit \term{has an interface dependency} on a module unit \tcode{U} - if it contains a \grammarterm{module-declaration} or - \grammarterm{module-import-declaration} that imports \tcode{U} or if it has - an interface dependency on a module unit that has an interface dependency on \tcode{U}. - A translation unit -\end{after} - shall not have an interface dependency on itself. - \begin{example} - \begin{Program} - // Interface unit of M1 - export module M1; - import M2; - - // Interface unit of M2 - export module M2; - import M3; - - // Interface unit of M3 - export module M3; - import M1; // error: cyclic interface dependency M3 -> M1 -> M2 -> M3 - \end{Program} - \end{example} - -\begin{before}\color{addclr} -\alinea - A translation unit has an interface dependency on a module \tcode{M} if it is - a module implementation unit of \tcode{M}, or if it contains a - \grammarterm{module-import-declaration} nominating \tcode{M}, or if it has - an interface dependency on a module that has an interface dependency on \tcode{M}. -\end{before} -\end{std.txt} - -%\begin{before} -%\rSec2[dcl.module.proclaim]{Proclaimed ownership declaration}% -% -%\begin{std.txt}\color{addclr} -% \begin{bnf}\color{addclr} -% \nonterminal{proclaimed-ownership-declaration}:\br -% \terminal{extern} \terminal{module} module-name \terminal{:} declaration -% \end{bnf} -% -% \resetalinea[0] -% \alinea -% A \grammarterm{proclaimed-ownership-declaration} shall only appear -% at namespace scope. -% It shall not appear directly or indirectly within an unnamed namespace. -% A \grammarterm{proclaimed-ownership-declaration} has the declarative effects -% of its \grammarterm{declaration}. -% The \grammarterm{declaration} shall declare at -% least one name, and the \grammarterm{decl-specifier-seq} (if any) -% of the \grammarterm{declaration} shall not contain \tcode{static}. -% The \grammarterm{declaration} shall not be a \grammarterm{namespace-definition}, -% an \grammarterm{export-declaration}, -% or a \grammarterm{proclaimed-ownership-declaration}. -% The \grammarterm{declaration} shall not be a defining declaration -% (\ref{basic.def}). -% A \grammarterm{proclaimed-ownership-declaration} nominating a module $M$ -% shall not appear in the purview of $M$. -% -% \alinea -% A \grammarterm{proclaimed-ownership-declaration} asserts that the entities -% introduced by the declaration are exported by the nominated module. -% \enternote -% A \grammarterm{proclaimed-ownership-declaration} may be used to break -% circular dependencies between two modules (in possibly too finely -% designed components.) -% \begin{example} -% \begin{codeblock} -% // TU 1 -% export module Ty; -% extern module Sym: struct Symbol; -% export struct Type { -% Symbol* decl; -% // ... -% }; -% -% // TU 2 -% export module Sym; -% extern module Ty: struct Type; -% export struct Symbol { -% const char* name; -% const Type* type; -% // ... -% }; -% \end{codeblock} -% \end{example} -% \exitnote -% -% \alinea -% The program is ill-formed, no diagnostic required, if the -% nominated module in the -% \grammarterm{proclaimed-ownership-declaration} does not export the entities -% introduced by the declaration. -%\end{std.txt} -%\end{before} - -\rSec2[dcl.module.global]{Global module fragment} - -\begin{std.txt}\color{addclr} -\begin{bnf} -\nonterminal{global-module-fragment}:\br - \terminal{module} \terminal{;} top-level-declaration-seq\opt -\end{bnf} - -\resetalinea[0] -\alinea -A \grammarterm{global-module-fragment} specifies the contents of the -\term{global module fragment} for a module unit. -The global module fragment can be used to provide declarations -that are attached to the global module and usable within the module unit. -\enternote -Before preprocessing, only preprocessing directives can appear -in the global module fragment (\ref{cpp.glob.frag}). -\exitnote - -\alinea -Declarations in the global module fragment are \term{discarded} if they -are not referenced by the module unit. -\begin{note} -A discarded declaration is neither reachable -nor visible to name lookup outside the module unit, -nor in template instantiations whose points of instantiation -(\stdref{temp.point}{12.7.4.1}) are outside the module unit, -even when the instantiation context (\ref{dcl.module.context}) -includes the module unit. -\end{note} -\begin{example} -\begin{codeblock} -// \tcode{"foo.h"} -namespace N { - struct X {}; - int f(X); - int g(X); - int h(X); -} - -// module \tcode{M} interface -module; -#include "foo.h" -export module M; -// \tcode{N::f} is reachable via argument-dependent name lookup result -// in context of template definition -template int use_f() { N::X x; f(x); } -// \tcode{N::g} is not reachable because \tcode{g} is a dependent name -// in context of template definition -template int use_g() { N::X x; g((T(), x)); } -// \tcode{N::h} is reachable because \tcode{use_h} has a point of -// instantiation in the module unit \tcode{M} -template int use_h() { N::X x; h((T(), x)); } -int k = use_h(); - -// module \tcode{M} implementation -module M; -int a = use_f(); // ok -int b = use_g(); // error: no viable function for call to \tcode{g} -int c = use_h(); // ok -\end{codeblock} -\end{example} - -%% Changes: entities now include their declaration context in their basis. -%% We need to retain those contexts so we can mangle the entity. - -\alinea -The \term{basis} of a declaration $D$ is a set of entites determined as follows: -\begin{itemize} -\item If $D$ declares a \grammarterm{typedef-name}, the basis is the -type-basis of the aliased type. - -\item If $D$ declares a variable or function, -the basis is the union of -the type-basis of the type of that variable or function -and the set containing the -innermost enclosing namespace, class, or function. - -\item If $D$ defines a class type, the basis is the union of the -type-bases of its direct base classes (if any), and the bases of -its \grammarterm{member-declaration}{s}, -and the set containing the -innermost enclosing namespace, class, or function. - -\item If $D$ is a \grammarterm{template-declaration}, -the basis is the union -of -\begin{itemize} -\item -the basis of its \grammarterm{declaration}, -\item -the set of entities (if any) designated by -the default template arguments for -non-type template parameters and template template parameters, -\item -the type-bases of the default type template arguments, -\item -the set containing the -innermost enclosing namespace, class, or function, and -\item -if $D$ declares a partial specialization, -the set containing the primary template. -\end{itemize} - -\item If $D$ is an \grammarterm{explicit-instantiation} -or an \grammarterm{explicit-specialization}, the basis includes -the primary template and all the entities in the basis of the -\grammarterm{declaration} of $D$. - -\item If $D$ is a \grammarterm{namespace-definition}, the basis comprises -the innermost enclosing namespace, if any. - -\item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is the -singleton consisting of the namespace denoted by the -\grammarterm{qualified-namespace-specifier}. - -\item If $D$ is a \grammarterm{using-declaration}, the basis is the union -of the bases of all the declarations introduced by -the \grammarterm{using-declarator}{s}. - -\item If $D$ is an \grammarterm{alias-declaration}, -the basis is the type-basis of its \grammarterm{defining-type-id}. - -\item Otherwise, the basis is empty. -\end{itemize} - -The \term{type-basis} of a type $T$ is -\begin{itemize} -\item If $T$ is a cv-qualified type, the type-basis is the type-basis of -the unqualified type. -\item If $T$ is a member of an unknown specialization, the type-basis -is the type-basis of that specialization. -\item If $T$ is a class template specialization, the type-basis -is the set consisting of -\begin{itemize} -\item the primary template, and -\item the entities designated by -non-type template arguments and -template template arguments (if any), and -\item the elements of the type-bases -of the type template arguments (if any). -\end{itemize} -\item If $T$ is a class type or an enumeration type, -the type-basis is the singleton $\{ T \}$. -\item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the -type-basis is the type-basis of $U$. -\item If $T$ is a function type, the type-basis is the union of the -type-basis of the return type and the type-bases of the parameter types. -\item If $T$ is a pointer to data member of a class $X$, the type-basis is -the union of the type-basis of $X$ and the type-basis of member type. -\item If $T$ is a pointer to member function type of a class $X$, the -type-basis is the union of the type-basis of $X$ and the type-basis of -the function type. -\item Otherwise, the type-basis is the empty set. -\end{itemize} - -A non-type template argument for a template parameter of pointer type -that is not value-dependent designates the entity (if any) that the -pointer points to. -A non-type template argument for a template parameter of reference type -that is not value-dependent designates the entity that the argument -denotes. -Other non-type template arguments do not designate an entity. - -\alinea -\begin{note} -The basis of a declaration -does not include entities used in expressions, -other than those designated by non-type template arguments. -\begin{example} -\begin{codeblock} -const int size = 2; -int ary1[size]; // \tcode{size} not in \tcode{ary1}'s basis -constexpr int identity(int x) { return x; } -int ary2[identity(2)]; // \tcode{identity} not in \tcode{ary2}'s basis - -template struct S; -template struct S2; -constexpr int g(int); - -template -S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2}, \mathtt{::} \}$ -\end{codeblock} -\end{example} -\end{note} - -\alinea -The \term{interface purview} of a module unit -is its purview excluding any \grammarterm{private-module-fragment}. - -\alinea -Certain declarations in a global module fragment are \term{referenced}. -Given an -\grammarterm{identifier}, -\grammarterm{unqualified-id}, -or expression -in an interface purview or -in a template instantiation whose point of instantiation is in that interface purview: -\begin{itemize} -\item -For an \grammarterm{identifier} or \grammarterm{unqualified-id}, -if name lookup for it finds a unique result, -the declaration found is referenced. -\item -For an expression, -the declarations of any function named by it are referenced. -\item -For an expression that governs name lookup for a dependent name, -consider an expression synthesized from it -by replacing each type-dependent argument -with a value of a placeholder type -with no associated namespaces or entities. -All declarations found by name lookup -for the corresponding name -in the synthesized expression are referenced. -\end{itemize} -The declarations of entities in the basis of a referenced declaration are referenced, recursively. -\end{std.txt} - -\rSec2[dcl.module.context]{Instantiation context} - -\begin{std.txt}\color{addclr} -\resetalinea[0] -\alinea -The \term{instantiation context} is a set of locations within the program -that determines which names are visible to argument-dependent name lookup -(\ref{basic.lookup.argdep}) -and which declarations are reachable (\ref{dcl.module.reach}) -in the context of a particular declaration or template instantiation. -The instantiation context depends on how the declaration was formed, -or where the template instantiation was referenced. - -\alinea -During the implicit definition of a defaulted special member function -(\stdref{special}{10.2.3}), -the instantiation context is the union of -the instantiation context from the definition of the class and -the instantiation context of the program construct that -resulted in the implicit definition of the special member function. - -\alinea -During the implicit instantiation of a template -whose point of instantiation is specified as -that of an enclosing specialization (\stdref{temp.point}{12.7.4.1}), -the instantiation context is the union of -the instantiation context of the enclosing specialization and, -if the template is defined in a module interface unit of a module $M$ -and the point of instantiation is not in a module interface unit of $M$, -the point at the end of the -\grammarterm{top-level-declaration-seq} of the -primary module interface unit of $M$ -(prior to the \grammarterm{private-module-fragment}, -if one is present). - -\alinea -During the implicit instantiation of a template -that is implicitly instantiated because it is referenced -from within the implicit definition of a defaulted special member function, -the instantiation context is the instantiation context of -the defaulted special member function. - -\alinea -During the instantiation of any other template specialization, -the instantiation context comprises the point of instantiation -of the template. - -\alinea -In any other case, the instantiation context at a program point comprises -that program point. - -\alinea -\begin{example} -\begin{codeblock} -// translation unit \#1 -export module stuff; -export template void foo(T, U u) { auto v = u; } -export template void bar(T, U u) { auto v = *u; } - -// translation unit \#2 -export module M1; -import "defn.h"; // provides \tcode{struct X \{\};} -import stuff; -export template void f(T t) { - X x; - foo(t, x); -} - -// translation unit \#3 -export module M2; -import "decl.h"; // provides \tcode{struct X;} (not a definition) -import stuff; -export template void g(T t) { - X *x; - bar(t, x); -} - -// translation unit \#4 -import M1; -import M2; -void test() { - // OK: the instantiation context of \tcode{foo} comprises - // the point at the end of translation unit \#1, - // the point at the end of translation unit \#2, and - // the point of the call to \tcode{f(0)} below, so - // the definition of \tcode{X} is reachable (\ref{dcl.module.reach}) - f(0); - - // the instantiation context of \tcode{foo} comprises - // the point at the end of translation unit \#1, - // the point at the end of translation unit \#3, and - // the point of the call to \tcode{g(0)} below, so - // the definition of \tcode{X} is not necessarily reachable - g(0); -} -\end{codeblock} -\end{example} -\end{std.txt} - -\rSec2[dcl.module.reach]{Reachability} - -\begin{std.txt}\color{addclr} -\resetalinea[0] -\alinea -A translation unit is \term{reachable} from a program point if -it is a module interface unit on which the translation unit containing the -program point has an interface dependency, or -it is a translation unit that the translation unit containing the -program point imports, -prior to that program point (\ref{dcl.module.import}). -\enternote -While module interface units are reachable even when they are only -transitively imported via a non-exported import declaration, -namespace-scope names from such module interface units are not visible -to name lookup (\ref{basic.scope.namespace}). -\exitnote - -\alinea -It is unspecified whether additional translation units on which the -program point has an interface dependency are considered reachable, -and under what circumstances.% -\footnote{Implementations are not required to prevent the semantic effects of -additional translation units involved in the compilation from being -observed.} -Programs intended to be portable should avoid -depending on the reachability of any additional translation units. - -\alinea -A declaration is \term{reachable} if, for any program point in the -instantiation context (\ref{dcl.module.context}), -\begin{itemize} -\item it appears prior to that program point in the same translation unit, or -\item it is not discarded (\ref{dcl.module.global}), -appears in a translation unit that is reachable from that program point, -and -either does not appear within a \grammarterm{private-module-fragment} -or appears in a \grammarterm{private-module-fragment} -of the module containing the program point. -\end{itemize} -\enternote -Whether a declaration is exported has no bearing on whether it is reachable. -\exitnote - -\alinea -The \term{reachable semantic properties} of an entity within a context -are the accumulated properties of all reachable declarations of -that entity, and determine the behavior of the entity within -that context. -\enternote -These reachable semantic properties include type completeness, -type definitions, initializers, -default arguments of functions or template declarations, attributes, -visibility of class or enumeration member names to ordinary lookup, -etc. -Since default arguments are evaluated in the context of the call expression, -the reachable semantic properties of the corresponding parameter types apply in -that context. -\begin{example} -\begin{codeblock} -// translation unit \#1 -export module M:A; -export struct B; - -// translation unit \#2 -module M:B; -struct B { - operator int(); -}; - -// translation unit \#3 -module M:C; -import :A; -B b1; // error: no reachable definition of \tcode{struct B} - -// translation unit \#4 -export module M; -export import :A; -import :B; -B b2; - -// translation unit \#5 -module X; -import M; -B b3; // error: no reachable definition of \tcode{struct B} -\end{codeblock} -\end{example} -\exitnote - -\alinea -\enternote -The reachable semantic properties for an entity attached to a module $M$ -are the same for all contexts outside that module in which the entity -can be referenced, irrespective of whether $M$ is directly or indirectly -imported. -\exitnote - -\alinea -\enternote -An entity can have reachable declarations and therefore -reachable semantic properties even if it is not visible -to name lookup. -\exitnote -\begin{example} -\begin{codeblock} -export module A; -struct X {}; -export using Y = X; - -module B; -import A; -Y y; // OK, definition of \tcode{X} is reachable -X x; // ill-formed: \tcode{X} not visible to unqualified lookup -\end{codeblock} -\end{example} - -\begin{before}\color{addclr} - \alinea - Within a module interface unit, it is necessary to determine that the - declarations being exported collectively present a coherent view of - the semantic properties of the entities they reference. This determination - is based on the semantic properties of attendant entities. - \enternote - The reachable semantics properties of an entity, the declarations of which - are made available via a \grammarterm{module-import-declaration}, are - determined by its owning module and are unaffected by the importing module. -\end{before}\begin{before}\color{addclr} - \begin{example} - \begin{codeblock} - // module interface of M1 - export module M1; - export struct S { }; - - // module interface of M2 - import M1; - export module M2; - export S f(); // \#1 - export S* g(); // \#2 - - // elsewhere - import M2; - auto x = f(); // OK: completeness of S obtained at \#1 - auto y = *g(); // OK: completeness of S obtained at \#2 - \end{codeblock} - \end{example} - \exitnote -\end{before}\begin{before}\color{addclr} - For each declaration $D$ exported from the module interface unit of a module $M$, - there is a set of zero or more - \term{attendant entities} defined as follows: - \begin{itemize} - \item If $D$ is a type alias declaration, then the attendant entities - of $D$ are those determined by the aliased type at the point of the - declaration $D$. - - \item If $D$ is a \grammarterm{using-declaration}, the set of attendant entities - is the union of the sets of attendant entities of the declarations introduced by - $D$ at the point of the declaration. - - \item If $D$ is a template declaration, the set of attendant entities is - the union of the set of attendant entities - of the declaration being parameterized, the set of attendant entities - determined by the default type template arguments (if any), - and the set consisting of - the entities (if any) designated by the default template template argument, - the default non-type template arguments (if any). - - \item if $D$ has a type $T$, the set of attendant entities is the set of - attendant entities determined by $T$ at the point of declaration. - - \item Otherwise, the set of attendant entities is empty. - \end{itemize} -\end{before}\begin{before}\color{addclr} - The \term{set of attendant entities determined by} a type $T$ is defined as follows - (exactly one of these cases matches): - \begin{itemize} - \item\color{addclr} If $T$ is a fundamental type, then - the set of attendant entities is empty. - - % \item\color{addclr} If $T$ is a dependent type denoted by a \grammarterm{typename-specifier} - % where the \grammarterm{nested-name-specifier} itself denotes a dependent type, - % then the set of attendant entities is the set of attendant entities determined by - % that type. - \item\color{addclr} If $T$ is a member of an unknown specialization, the set of - attendant entities is the set of attendant entities determined by that - unknown specialization. - - \item\color{addclr} If $T$ is a class type owned by $M$, the set of attendant entities includes - $T$ itself, the union of the sets of the attendant entities determined - by its direct base classes owned by $M$, the sets of the - attendant entities of its data members, static data member templates, - member functions, member function templates, - the function parameters of its constructors and constructor templates. - Furthermore, if $T$ is a - class template specialization, the set of attendant entities also - includes: the class template if it is owned by $M$, - the union of the sets of attendant entities determined by the type - template-arguments, the sets of the attendant entities of the templates - used as template template-arguments, the sets of the attendant entities - determined by the types of the non-type template-arguments. - - \item\color{addclr} If $T$ is an enumeration type owned by $M$, - the set of attendant entities is the singleton $\{T\}$. - - \item\color{addclr} If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, - the set of attendant entities is the set of attendant entities determined by $U$. - - \item\color{addclr} If $T$ is a function type, the set of attendant entities is the - union of the set of attendant entities determined by the function - parameter types and the return type. - - \item\color{addclr} if $T$ is a pointer to data member of class $X$, the set of attendant - entities is the union of the set of attendant entities of the member type - and the set of attendant entities determined by $X$. - - \item\color{addclr} If $T$ is a pointer to member function type of a class $X$, the - set of attendant entities is the union of the set of attendant entities - determined by $X$ and the set of attendant entities determined by - the function type. - - \item\color{addclr} Otherwise, the set of attendant entities is empty. - \end{itemize} -\end{before}\begin{before}\color{addclr} - If a class template $X$ is an attendant entity, then its reachable semantic - properties include all the declarations of the primary class template, - its partial specializations, and its explicit specializations in the - containing module interface unit. - If a complete class type $X$ is an attendant entity, then its reachable - semantic properties include the declarations of its nested types but - not the definitions of the types denoted by those members - unless those definitions are exported. - Furthermore, if $X$ is an attendant entity of an - exported declaration $D$, then its reachable semantic properties are - restricted to those defined by the exported declarations of $X$ - (if $X$ is introduced by an exported declaration), or by - the semantic properties of $X$ available at the point of the declaration $D$. - \enternote - If $X$ is a complete class type that is an attendant entity, its nested types - (including nested enumerations and associated enumerators) - and member class templates - are not considered attendant entities unless they are determined attendant - entities by one of the rules above. Attendant entities allow type checking - of direct member selection of an object even if that object's type isn't exported. - Declarations, such as \grammarterm{asm-declaration} or - \grammarterm{alias-declaration} or - \grammarterm{static\_assert-declaration}, - that do not declare entities do not contribute to the set of attendant entities. - \exitnote - \begin{example} - \begin{codeblock} - export module M; - export struct Foo; // Foo exported as incomplete type - struct Foo { }; - export using ::Foo; // OK: exports complete type Foo - - struct C { }; - struct S { - struct B { }; - using C = ::C; - int i : 8; - double d { }; - }; - - export S f(); // S attendant entity of f(). - - // translation unit 2 - import M; - int main() { - int x = sizeof(decltype(f())::B); // error: incomplete B - int y = sizeof(decltype(f())::C); // error: incomplete C - decltype(f()) s { }; - s.d = 3.14; // OK - return &s.i != nullptr; // error: cannot take address of bitfield - } - \end{codeblock} - \end{example} -\end{before}\begin{before}\color{addclr} - \alinea - If $X$ is an attendant entity of two exported declarations - designating two distinct entities, - %\begin{after}\color{addclr} - and $X$ is declared in the purview of the global module, - %\end{after} - its reachable semantic properties shall - be the same at the points where the declarations occur. - %\begin{before}\color{addclr} - \begin{example} - \begin{codeblock} - export module M; - struct S; - export S f(); // \#1 - struct S { }; - export S g(); // error: class type S has different properties from \#1 - \end{codeblock} - \end{example} - %\end{before} - -% \begin{after}\color{addclr} -% \begin{example} -% \begin{codeblock} -% module; -% struct S; -% export module M; -% export S f(); // \#1 -% extern "C++" struct S { }; -% export S g(); // error: class type S has different properties from \#1 -% \end{codeblock} -% \end{example} -% \end{after} -\end{before} -\end{std.txt} diff --git a/src/lexical.tex b/src/lexical.tex index f932ff8..bc48c1c 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -43,7 +43,7 @@ \added{It is implementation-defined whether the sources for module units and header units on which the current translation unit has an interface - dependency (\ref{dcl.module.unit}, \ref{dcl.module.import}) + dependency (\ref{module.unit}, \ref{module.import}) are required to be available.} \enternote Source files, translation units and translated translation units need not diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 6662e3b..67c1f52 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -31,7 +31,7 @@ \color{addclr} \alinea If the header identified by the \grammarterm{header-name} -denotes an importable header (\ref{dcl.module.import}), +denotes an importable header (\ref{module.import}), the preprocessing directive is instead replaced by the \grammarterm{preprocessing-token}{s} @@ -108,7 +108,7 @@ A sequence of \grammarterm{preprocessing-token}{s} matching the form of a \grammarterm{pp-import} instructs the preprocessor to import macros from the header unit -(\ref{dcl.module.import}) denoted by the \grammarterm{header-name}. +(\ref{module.import}) denoted by the \grammarterm{header-name}. The \tcode{;} \grammarterm{preprocessing-token} shall not be produced by macro replacement (\stdref{cpp.replace}{14.3}). The \term{point of macro import} for a \grammarterm{pp-import} is diff --git a/src/templates.tex b/src/templates.tex index 9bbeecc..ee3d51a 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -52,7 +52,7 @@ \item Declarations from namespaces associated with the types of the function arguments both from the instantiation context -\removed{(12.7.4.1)} \added{(\ref{dcl.module.context})} +\removed{(12.7.4.1)} \added{(\ref{module.context})} and from the definition context. \end{itemize} \enterexample\color{addclr} diff --git a/src/ts.tex b/src/ts.tex index 7b1a47b..eccbf9e 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -120,6 +120,7 @@ \include{lexical} \include{basic} \include{declarations} +\include{modules} \include{classes} \include{overloading} \include{templates} From 99336e99f1e360429389303465efd8d3d1e33b15 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sat, 10 Nov 2018 17:11:17 -0800 Subject: [PATCH 44/77] More CWG review. --- src/declarations.tex | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/declarations.tex b/src/declarations.tex index 3a85e59..6604357 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -93,6 +93,30 @@ \exitnote} \end{std.txt} +\setcounter{subsection}{6} +\rSec2[dcl.type]{Type specifiers}% + +\setcounter{subsubsection}{3} +\rSec3[dcl.spec.auto]{The \tcode{auto} specifier}% + +\noindent +Add a new paragraph before 9.1.7.4/9 (``If the name of an entity with an +undeduced placeholder type appears in an expression, the program is +ill-formed.'') as follows: +\begin{std.txt} +\resetalinea[8] +\alinea +\added{An exported function +with a declared return type that uses a placeholder type +shall be defined in the translation unit +containing its exported declaration, +outside the \grammarterm{private-module-fragment} (if any). +\enternote +There is no restriction on the linkage of +the deduced return type. +\exitnote} +\end{std.txt} + \setcounter{section}{6} \rSec1[basic.namespace]{Namespaces}% %\indextext{namespaces|(} @@ -108,24 +132,7 @@ regions, the definition of a namespace can be split over several parts of one or more translation units. - %\begin{before} - %\added{A namespace with external linkage is always - % exported regardless of whether any of its \term{namespace-definition}{s} is - % introduced by \tcode{export}. - % \enternote - % There is no way to define a namespace with module linkage. - % \exitnote - %}\color{addclr} - %\begin{example} - %\begin{codeblock} - % export module M; - % namespace N { // N has external linkage and is exported - % } - %\end{codeblock} - %\end{example} - %\end{before} \alinea - \begin{after} \added{\enternote A namespace name with external linkage is exported if any of its \term{namespace-definition}{s} is exported, or if it contains any @@ -142,5 +149,4 @@ namespace N3 { export int n; } // \tcode{N3} is exported \end{codeblock} \end{example} - \end{after} \end{std.txt} From f3a5d3416793dc7d7cc1f412f8aa9e1d29061ced Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 26 Nov 2018 22:10:54 -0800 Subject: [PATCH 45/77] Add missing files. --- src/compat.tex | 65 +++ src/modules.tex | 1407 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1472 insertions(+) create mode 100644 src/compat.tex create mode 100644 src/modules.tex diff --git a/src/compat.tex b/src/compat.tex new file mode 100644 index 0000000..ceee452 --- /dev/null +++ b/src/compat.tex @@ -0,0 +1,65 @@ +%!TEX root = std.tex +\setcounter{chapter}{2} +\rSec0[diff]{Compatibility}% + +\setcounter{section}{4} +\rSec1[diff.cpp17]{C++ and ISO C++ 2017}% + +\setcounter{subsection}{0} +\rSec2[diff.cpp17.lex]{Clause 5: lexical conventions}% + +\noindent +Add new entry as follows: +\begin{std.txt} +\color{addclr} +\textbf{Affected subclauses:} 5.8\\ +\textbf{Change:} \grammarterm{header-name} tokens are formed in more contexts.\\ +\textbf{Rationale:} Required for new features.\\ +\textbf{Effect on original feature:} +When the identifier \tcode{import} +is followed by a \tcode{<} or \tcode{"} character +with intervening whitespace, +a \grammarterm{header-name} token may be formed. +\begin{example} +\begin{codeblock} +template class import {}; +void f(import ); // ill-formed; previously well-formed +void f(import); // OK + +#define import "foo" +const char *p = import "bar"; // ill-formed: cannot concatenate \grammarterm{header-name} tokens + +#define EMPTY +#define import EMPTY "foo" +const char *q = import"bar"; // OK +\end{codeblock} +\end{example} +\end{std.txt} + +\setcounter{subsection}{2} +\rSec2[diff.cpp17.dcl]{Clause 9: declarations}% + +\noindent +Add new entry as follows: +\begin{std.txt} +\color{addclr} +\textbf{Affected subclauses:} 9.11.1, 9.11.3\\ +\textbf{Change:} New identifiers with special meaning.\\ +\textbf{Rationale:} Required for new features.\\ +\textbf{Effect on original feature:} +Top-level declarations beginning with +\tcode{module} or \tcode{import} may +either be ill-formed or interpreted differently +in this International Standard. +\begin{example} +\begin{codeblock} +class module; +module *m; // ill-formed; previously well-formed +::module *m; // OK + +class import; +import j; // was variable declaration; now \grammarterm{import-declaration} +::import j; // variable declaration +\end{codeblock} +\end{example} +\end{std.txt} diff --git a/src/modules.tex b/src/modules.tex new file mode 100644 index 0000000..df3bf18 --- /dev/null +++ b/src/modules.tex @@ -0,0 +1,1407 @@ +%!TEX root = std.tex +\setcounter{chapter}{99} +\rSec0[module]{Modules}% +%\indextext{declaration|(} + +\noindent +Add a new clause between 9 and 10 titled ``\textbf{Modules}'' with contents as follows: + +\rSec1[module.unit]{Module units and purviews} + +\begin{std.txt}\color{addclr} +\begin{bnf}\color{addclr} +\nonterminal{module-declaration}:\br + \terminal{export}\opt{} \terminal{module} module-name module-partition\opt{} attribute-specifier-seq\opt{} \terminal{;} +\end{bnf} + + \begin{bnf}\color{addclr} + \nonterminal{module-name}:\br + module-name-qualifier\opt identifier + \end{bnf} + + \begin{after} + \begin{bnf}\color{addclr} + \nonterminal{module-partition}:\br + \terminal{:} module-name-qualifier\opt identifier + \end{bnf} + \end{after} + + \begin{bnf}\color{addclr} + \nonterminal{module-name-qualifier}:\br + identifier \terminal{.}\br + module-name-qualifier identifier \terminal{.} + \end{bnf} + + \resetalinea[0] +\alinea A \term{module unit} is a translation unit that contains +a \grammarterm{module-declaration}. A \term{named module} is the +collection of module units with the same \grammarterm{module-name}. +%Two \grammarterm{module-name}{s} are the same if they are +%composed of the same dotted sequence of \grammarterm{identifier}{s}. +The identifiers \tcode{module} and \tcode{import} +shall not appear as \grammarterm{identifier}{s} +in a \grammarterm{module-name} or \grammarterm{module-partition}. +The optional \grammarterm{attribute-specifier-seq} +appertains to the \grammarterm{module-declaration}. + +\alinea +A \term{module interface unit} is a module unit whose +\grammarterm{module-declaration} contains the \texttt{export} keyword; +any other module unit is a \term{module implementation unit}. +A named module shall contain exactly one module interface unit +with no \grammarterm{module-partition}, known as the +\term{primary module interface unit} of the module; +no diagnostic is required. + +\alinea +A \term{module partition} is +a module unit whose \grammarterm{module-declaration} contains +a \grammarterm{module-partition}. +A named module shall not contain multiple module partitions with +the same %dotted sequence of \grammarterm{identifier}{s} in their +\grammarterm{module-partition}. +All module partitions of a module +that are module interface units +shall be directly or indirectly exported +by the primary module interface unit (\ref{module.import}). +No diagnostic is required for a violation of these rules. +\enternote +Module partitions can only be imported by +other module units in the same module. +The division of a module into module units +is not visible outside the module. +\exitnote + +\begin{after}\color{addclr} +\alinea +\begin{example} +\begin{codeblock} +// TU 1 +export module A; +export import :Foo; +export int baz(); +\end{codeblock} + +\begin{codeblock} +// TU 2 +export module A:Foo; +import :Internals; +export int foo() { return 2 * (bar() + 1); } +\end{codeblock} + +\begin{codeblock} +// TU 3 +module A:Internals; +int bar(); +\end{codeblock} + +\begin{codeblock} +// TU 4 +module A; +import :Internals; +int bar() { return baz() - 10; } +int baz() { return 30; } +\end{codeblock} + +Module \tcode{A} contains four translation units: +\begin{itemize} +\item a primary module interface unit, +\item a module partition \tcode{A:Foo}, which is a module interface unit +forming part of the interface of module \tcode{A}, +\item a module partition \tcode{A:Internals}, which does not contribute +to the external interface of module \tcode{A}, and +\item an module implementation unit providing +a definition of \tcode{bar} and \tcode{baz}, +which cannot be imported because +it does not have a partition name. +\end{itemize} +\end{example} +\end{after} + +\alinea +A \term{module unit purview} starts at the \grammarterm{module-declaration} +and extends to the end of the translation unit. +The \term{purview} of a named module \tcode{M} is the set of module unit purviews +of \tcode{M}'s module units. + +\alinea +The \term{global module} is the collection of all +\grammarterm{global-module-fragment}{s} +and all translation units that are not module units. +Declarations appearing in such a context +are said to be in the \term{purview} of the global module. +\enternote +The global module has no name, no module interface unit, and is not +introduced by any \grammarterm{module-declaration}. +\exitnote + +\alinea + A \term{module} is either a named module or the global module. + A declaration is \term{attached} to a module as follows: + \begin{itemize}\color{addclr} + \item If the declaration + \begin{itemize}\color{addclr} + \item is a replaceable global allocation or deallocation + function (\stdref{new.delete.single}{21.6.2.1}, \stdref{new.delete.array}{21.6.2.2}), or + \item is a \grammarterm{namespace-declaration} with external linkage, or + \item appears within a \grammarterm{linkage-specification}, + \end{itemize}\color{addclr} + it is attached to the global module. + + \item Otherwise, the declaration is + attached to the module in whose purview it appears. + \end{itemize} + +% Notion of 'ownership' is unused; removed. +% \alinea +% \begin{before}\color{addclr} +%For a namespace-scope declaration $D$ of an entity (other than a +%namespace), if $D$ is within a \grammarterm{proclaimed-ownership-declaration} +%for a module $X$, the entity is said to be \term{owned} by $X$. +%Otherwise, if $D$ is the first declaration of that entity, then that entity is said +%to be \term{owned} by the module in whose purview $D$ appears. +%\end{before} +%\begin{after}\color{addclr} +%An entity introduced at namespace scope is \term{owned} by the +%module to which its first declaration is attached. +%\end{after} + + \alinea +\color{addclr} +A \grammarterm{module-declaration} +that contains neither \tcode{export} +nor a \grammarterm{module-partition} +implicitly imports the primary module interface unit of the module +as if by a \grammarterm{module-import-declaration}. +\begin{example} +\begin{codeblock} +// TU 1 +module B:Y; // does not implicitly import \tcode{B} +int y(); +\end{codeblock} + +\begin{codeblock} +// TU 2 +export module B; +import :Y; // OK, does not create interface dependency cycle +int n = y(); +\end{codeblock} + +\begin{codeblock} +// TU 3 +module B:X1; // does not implicitly import \tcode{B} +int &a = n; // error: \tcode{n} not visible here +\end{codeblock} + +\begin{codeblock} +// TU 4 +module B:X2; // does not implicitly import \tcode{B} +import B; +int &b = n; // OK +\end{codeblock} + +\begin{codeblock} +// TU 5 +module B; // implicitly imports \tcode{B} +int &c = n; // OK +\end{codeblock} +\end{example} +\end{std.txt} + +\rSec1[module.interface]{Export declaration}% + +\begin{std.txt}\color{addclr} + \begin{bnf}\color{addclr} + \nonterminal{export-declaration}:\br + \terminal{export} declaration\br + \terminal{export} \terminal{\{} declaration-seq${}_{opt}$ \terminal{\}} + \end{bnf} + + \resetalinea[0] + \alinea + An \grammarterm{export-declaration} shall appear only + at namespace scope and only in the purview of a module interface unit. + An \grammarterm{export-declaration} shall not appear directly + or indirectly within an unnamed namespace + or a \grammarterm{private-module-fragment}. + An \grammarterm{export-declaration} + has the declarative effects of its \grammarterm{declaration} + or its \grammarterm{declaration-seq} (if any). + An \grammarterm{export-declaration} does not + establish a scope and its \grammarterm{declaration} + or \grammarterm{declaration-seq} + shall not contain an \grammarterm{export-declaration}. + + \alinea + A declaration is \term{exported} if it is + \begin{itemize}\color{addclr} + \item a namespace-scope declaration declared within an + \grammarterm{export-declaration}, or + \item a \grammarterm{module-import-declaration} declared with + the \tcode{export} keyword (\ref{module.import}), or + \item a \grammarterm{namespace-definition} that contains an + exported declaration, or + \item a declaration within a header unit (\ref{module.import}) + that satisfies the rules for an exported declaration below. + \end{itemize} + The \term{interface} of a module \tcode{M} is the set of all + exported declarations within its purview. + \begin{example} + \begin{codeblock} + export module M; + namespace A { // exported + export int f(); // exported + int g(); // not exported + } + \end{codeblock} + The interface of \tcode{M} comprises \tcode{A} and \tcode{A::f}. + \end{example} + +\textbf{\color{red}FIXME: The following rule should be checked +with EWG; it forbids (for example) \tcode{static_assert} within +an \tcode{export} block.} + + \alinea + An exported declaration shall declare at least one name. + If the declaration is not within a header unit, + it shall not declare a name with internal linkage. + %\grammarterm{decl-specifier-seq} (if any) of the + %\grammarterm{declaration} shall not contain \tcode{static}, + %and the \grammarterm{declaration} shall not be an + %\grammarterm{unnamed-namespace-definition}. + + \alinea + \begin{example} + \begin{codeblock} + // \tcode{"a.h"} + export int x; + + // TU 1 + module; + #include "a.h" // error: declaration of \tcode{x} is not in the + // purview of a module interface unit + export module M; + export namespace {} // error: does not introduce any names + export namespace { + int a1; // error: export of name with internal linkage + } + namespace { + export int a2; // error: export of name with internal linkage + } + export static int b; // error: b explicitly declared static + export int f(); // OK + export namespace N { } // OK + export using namespace N; // error: does not declare a name + \end{codeblock} + \end{example} + + \alinea + If the declaration is a \grammarterm{using-declaration} + (9.8 [namespace.udecl]), all entities to which all of the + \grammarterm{using-declarator}{s} ultimately refer (if any) + shall have been introduced with a name having external linkage. +\begin{example} +\begin{codeblock} +// \tcode{"b.h"} +int f(); + +// \tcode{"c.h"} +int g(); + +// TU 1 +export module X; +export int h(); + +// TU 2 +module; +#include "b.h" +export module M; +import "c.h"; +import X; +export using ::f, ::g, ::h; // OK +struct S; +export using ::S; // error: \tcode{S} has module linkage +namespace N { + export int h(); + static int h(int); // \#1 +} +export using N::h; // error: \#1 has internal linkage +\end{codeblock} +\end{example} + \enternote + Names introduced by \tcode{typedef} declarations + and \grammarterm{alias-declaration}{s} + are not so constrained. + \begin{example} + \begin{codeblock} + export module M; + struct S; + export using T = S; // OK: exports name T denoting type S + \end{codeblock} + \end{example} + \exitnote + + \alinea + A redeclaration of an exported declaration of an entity + is implicitly exported. + An exported redeclaration of a non-exported declaration + of an entity is ill-formed. + \begin{example} + \begin{codeblock} + export module M; + struct S { int n; }; + export typedef S S; // OK, not a redeclaration of \tcode{struct S} + export struct S; // error: exported declaration follows non-exported definition + \end{codeblock} + \end{example} + + \alinea + A name is \term{exported} by a module + if it is introduced or redeclared + by an exported declaration in the purview of that module. + \enternote + Exported names have either external linkage or no linkage; see \ref{basic.link}. + Namespace-scope names exported by a module are visible to name lookup + in any translation unit importing that module; see \ref{basic.scope.namespace}. + Class and enumeration member names are visible to name lookup in any + context in which a definition of the type is reachable. + \exitnote + \begin{example} + \begin{codeblock} + // Interface unit of M + export module M; + export struct X { + static void f(); + struct Y { }; + }; + + namespace { + struct S { }; + } + export void f(S); // OK + struct T { }; + export T id(T); // OK + + export struct A; // A exported as incomplete + + export auto rootFinder(double a) { + return [=](double x) { return (x + a/x)/2; }; + } + + export const int n = 5; // OK: n has external linkage + + // Implementation unit of M + module M; + struct A { + int value; + }; + + // main program + import M; + int main() { + X::f(); // OK: \tcode{X} is exported and definition of \tcode{X} is reachable + X::Y y; // OK: \tcode{X::Y} is exported as a complete type + auto f = rootFinder(2); // OK + return A{45}.value; // error: \tcode{A} is incomplete + } + \end{codeblock} + \end{example} + + \alinea + \enternote + Redeclaring a name in an \grammarterm{export-declaration} + cannot change the linkage of the name (\ref{basic.link}). + \begin{example} + \begin{codeblock} + // Interface unit of M + export module M; + static int f(); // \#1 + export int f(); // error: \#1 gives internal linkage + struct S; // \#2 + export struct S; // error: \#2 gives module linkage + namespace { + namespace N { + extern int x; // \#3 + } + } + export int N::x; // error: \#3 gives internal linkage + \end{codeblock} + \end{example} + \exitnote +%% If the +%% \term{export-declaration} introduces a function template or a variable +%% template then the type of the corresponding current instantiation shall +%% contain only types with external linkage. If the +%% \term{export-declaration} introduces a template alias then the aliased +%% type shall have external linkage. If the +%% \term{export-declaration} defines a class template, then all +%% non-internal members of the corresponding current instantiation shall +%% contain only types with external linkage. + +%% \alinea +%% In a \grammarterm{exported-fragment-group}, +%% each \grammarterm{fragment} is processed +%% as an exported declaration. + +\alinea +\begin{note} +Declarations in an exported \grammarterm{namespace-definition} +or in an exported \grammarterm{linkage-specification} (10.5) +are +exported and subject to the rules of exported declarations. +\begin{example} +\begin{codeblock} +export module M; +export namespace N { + int x; // OK + static_assert(1 == 1); // error: does not declare a name +} +\end{codeblock} +\end{example} +\end{note} +\end{std.txt} + + +\rSec1[module.import]{Import declaration}% + +\begin{std.txt}\color{addclr} +\begin{before} + \begin{bnf}\color{addclr} + \nonterminal{module-import-declaration}:\br + \terminal{import} module-name attribute-specifier-seq\opt {} \terminal{;} + \end{bnf} +\end{before}\begin{after} + \begin{bnf}\color{addclr} + \nonterminal{module-import-declaration}:\br + \terminal{export}\opt{} \terminal{import} module-name attribute-specifier-seq\opt {} \terminal{;}\br + \terminal{export}\opt{} \terminal{import} module-partition attribute-specifier-seq\opt {} \terminal{;}\br + \terminal{export}\opt{} \terminal{import} header-name attribute-specifier-seq\opt {} \terminal{;} + \end{bnf} +\end{after} + + \resetalinea[0] + \alinea + In a module unit, all \grammarterm{module-import-declaration}{s} + shall precede all other \grammarterm{top-level-declaration}{s} in + the \grammarterm{top-level-declaration-seq} of the + \grammarterm{translation-unit}. +The optional \grammarterm{attribute-specifier-seq} +appertains to the \grammarterm{module-import-declaration}. + + \alinea + A \grammarterm{module-import-declaration} \term{imports} a set of + translation units determined as described below. + \enternote + Namespace-scope names exported by the imported translation units + become visible (\ref{basic.scope.namespace}) + in the importing translation unit + and declarations within the imported translation units + become reachable (\ref{module.reach}) + in the importing translation unit + after the import declaration. + \exitnote + + \alinea + A \grammarterm{module-import-declaration} that specifies + a \grammarterm{module-name} $M$ + imports all module interface units of $M$. + + \alinea + A \grammarterm{module-import-declaration} that specifies + a \grammarterm{module-partition} shall only appear after + the \grammarterm{module-declaration} in a module unit in + some module $M$. + Such a declaration imports the so-named + module partition of $M$. + + \alinea + A \grammarterm{module-import-declaration} that specifies + a \grammarterm{header-name} $H$ imports + a synthesized \term{header unit}, + which is a translation unit formed by applying + phases 1 to 7 of translation (\stdref{lex.phases}{5.2}) + to the source file or header nominated by $H$, + which shall not contain a \grammarterm{module-declaration}. + \enternote + All declarations within a header unit are implicitly + exported (\ref{module.interface}), + and are attached to the global module (\ref{module.unit}). + \exitnote + An \term{importable header} is a member of an + implementation-defined set of headers. + $H$ shall identify an importable header. + Two + \grammarterm{module-import-declaration}{s} + import the same header unit if and only if + their \grammarterm{header-name}{s} identify the same + header or source file (\ref{cpp.include}). + \enternote + A \grammarterm{module-import-declaration} nominating + a \grammarterm{header-name} is also recognized by the + preprocessor, and results in macros defined at the + end of phase 4 of translation of the header unit + being made visible as described in \ref{cpp.module}. + \exitnote + A declaration of a name with internal linkage is + permitted within a header unit despite all + declarations being implicitly exported (\ref{module.interface}). + If such a name is odr-used outside the + header unit, or by a template + instantiation whose point of instantiation is outside + the header unit, the program is ill-formed. + + \alinea + When a \grammarterm{module-import-declaration} imports + a translation unit $T$, it also imports + all translation units imported by + exported \grammarterm{module-import-declaration}{s} + in $T$; such translation units are + said to be exported by $T$. + When a \grammarterm{module-import-declaration} in a module unit imports + another module unit of the same module, it also imports + all translation units imported by + all \grammarterm{module-import-declaration}{s} + in that module unit. + These rules may in turn lead to the importation of yet more + translation units. + + \alinea + \color{addclr} + A module implementation unit shall not be exported. + \begin{example} + \begin{Program} +// Translation unit \#1 +module M:Part; + +// Translation unit \#2 +export module M; +export import :Part; // error: exported partition \tcode{:Part} is an implementation unit + \end{Program} + \end{example} + +% FIXME +% \alinea +% \begin{after}\color{addclr} +% Importing a translation unit $M$ +% \end{after} +% makes every citation and every +% %\begin{before}\color{addclr} +% exported declaration +% %\end{before} +% %\begin{after}\color{addclr} +% %exported name +% %\end{after} +% from the +% abstract semantics graph of $M$ available, as a citation, +% %makes exported declarations from the interface of the nominated module visible +% to name lookup in +% the current translation unit, in the same namespaces and contexts +% as in $M$. +% % the nominated module. +% \begin{after}\color{addclr} +% If $M$ is part of the same module as the importing translation unit, +% importing $M$ also makes every name declared in the purview of $M$ +% that does not have internal linkage visible to name lookup +% in the current translation unit, in the same namespaces and contexts +% as in $M$. +% \end{after} +% \begin{before}\color{addclr} +% A \term{citation} for a declaration attached to a module $M$ is a pair of +% $M$ and the corresponding declset from the abstract semantics graph +% of $M$. +% \end{before} +% \begin{after}\color{addclr} +% A \term{citation} for a declaration in a translation unit $M$ is a pair of +% $M$ and the corresponding declset from the abstract semantics graph +% of $M$. +% \end{after} +%% The \grammarterm{attribute-specifier-seq} appartain to the nominated module. +% \enternote +% The declarations in the declsets and the entities denoted by the declsets +% are not redeclared in the translation unit +% containing the \grammarterm{module-import-declaration}. +% \exitnote + +% FIXME +% \begin{after}\color{addclr} +% \alinea +% \enternote +% A \grammarterm{module-import-declaration} also makes all +% declarations in the purview of the module interface units of $M$ +% reachable in the current translation unit, and may make declarations +% from the preamble of $M$ reachable in the current translation +% unit, as described in \ref{module.reach}. +% \exitnote +% \end{after} +% \begin{example} +% \begin{Program} +% // Interface unit of M +% export module M; +% export namespace N { +% struct A { }; +% } +% namespace N { +% struct B { }; +% export struct C { +% friend void f(C) { } // exported, visible only through argument-dependent lookup +% }; +% } +% +% // Translation unit 2 +% import M; +% N::A a { }; // OK. +% N::B b { }; // error: `B' not found in N. +% void h(N::C c) { +% f(c); // OK: `N::f' found via argument-dependent lookup +% N::f(c); // error: `f' not found via qualified lookup in N. +% } +% \end{Program} +% \end{example} + + \alinea + A module implementation unit of a module \tcode{M} + that is not a module partition + shall not contain a \grammarterm{module-import-declaration} + nominating \tcode{M}. + \begin{example} + \begin{codeblock} + module M; + import M; // error: cannot import M in its own unit + \end{codeblock} + \end{example} + + \alinea +\begin{before}\color{addclr} + A module \tcode{M1} \term{has an interface dependency} on a module + \tcode{M2} if the module interface of \tcode{M1} contains a + \grammarterm{module-import-declaration} nominating \tcode{M2}, + or if there exists a module \tcode{M3} such that \tcode{M1} has an + interface dependency on \tcode{M3} and \tcode{M3} has an interface dependency + on \tcode{M2}. A module +\end{before} +\begin{after}\color{addclr} + A translation unit \term{has an interface dependency} on a module unit \tcode{U} + if it contains a \grammarterm{module-declaration} or + \grammarterm{module-import-declaration} that imports \tcode{U} or if it has + an interface dependency on a module unit that has an interface dependency on \tcode{U}. + A translation unit +\end{after} + shall not have an interface dependency on itself. + \begin{example} + \begin{Program} + // Interface unit of M1 + export module M1; + import M2; + + // Interface unit of M2 + export module M2; + import M3; + + // Interface unit of M3 + export module M3; + import M1; // error: cyclic interface dependency M3 -> M1 -> M2 -> M3 + \end{Program} + \end{example} + +\begin{before}\color{addclr} +\alinea + A translation unit has an interface dependency on a module \tcode{M} if it is + a module implementation unit of \tcode{M}, or if it contains a + \grammarterm{module-import-declaration} nominating \tcode{M}, or if it has + an interface dependency on a module that has an interface dependency on \tcode{M}. +\end{before} +\end{std.txt} + +%\begin{before} +%\rSec1[module.proclaim]{Proclaimed ownership declaration}% +% +%\begin{std.txt}\color{addclr} +% \begin{bnf}\color{addclr} +% \nonterminal{proclaimed-ownership-declaration}:\br +% \terminal{extern} \terminal{module} module-name \terminal{:} declaration +% \end{bnf} +% +% \resetalinea[0] +% \alinea +% A \grammarterm{proclaimed-ownership-declaration} shall only appear +% at namespace scope. +% It shall not appear directly or indirectly within an unnamed namespace. +% A \grammarterm{proclaimed-ownership-declaration} has the declarative effects +% of its \grammarterm{declaration}. +% The \grammarterm{declaration} shall declare at +% least one name, and the \grammarterm{decl-specifier-seq} (if any) +% of the \grammarterm{declaration} shall not contain \tcode{static}. +% The \grammarterm{declaration} shall not be a \grammarterm{namespace-definition}, +% an \grammarterm{export-declaration}, +% or a \grammarterm{proclaimed-ownership-declaration}. +% The \grammarterm{declaration} shall not be a defining declaration +% (\ref{basic.def}). +% A \grammarterm{proclaimed-ownership-declaration} nominating a module $M$ +% shall not appear in the purview of $M$. +% +% \alinea +% A \grammarterm{proclaimed-ownership-declaration} asserts that the entities +% introduced by the declaration are exported by the nominated module. +% \enternote +% A \grammarterm{proclaimed-ownership-declaration} may be used to break +% circular dependencies between two modules (in possibly too finely +% designed components.) +% \begin{example} +% \begin{codeblock} +% // TU 1 +% export module Ty; +% extern module Sym: struct Symbol; +% export struct Type { +% Symbol* decl; +% // ... +% }; +% +% // TU 2 +% export module Sym; +% extern module Ty: struct Type; +% export struct Symbol { +% const char* name; +% const Type* type; +% // ... +% }; +% \end{codeblock} +% \end{example} +% \exitnote +% +% \alinea +% The program is ill-formed, no diagnostic required, if the +% nominated module in the +% \grammarterm{proclaimed-ownership-declaration} does not export the entities +% introduced by the declaration. +%\end{std.txt} +%\end{before} + +\rSec1[module.global]{Global module fragment} + +\begin{std.txt}\color{addclr} +\begin{bnf} +\nonterminal{global-module-fragment}:\br + \terminal{module} \terminal{;} top-level-declaration-seq\opt +\end{bnf} + +\resetalinea[0] +\alinea +A \grammarterm{global-module-fragment} specifies the contents of the +\term{global module fragment} for a module unit. +The global module fragment can be used to provide declarations +that are attached to the global module and usable within the module unit. +\enternote +Before preprocessing, only preprocessing directives can appear +in the global module fragment (\ref{cpp.glob.frag}). +\exitnote + +\alinea +Declarations in the global module fragment are \term{discarded} if they +are not referenced by the module unit. +\begin{note} +A discarded declaration is neither reachable +nor visible to name lookup outside the module unit, +nor in template instantiations whose points of instantiation +(\stdref{temp.point}{12.7.4.1}) are outside the module unit, +even when the instantiation context (\ref{module.context}) +includes the module unit. +\end{note} +\begin{example} +\begin{codeblock} +// \tcode{"foo.h"} +namespace N { + struct X {}; + int f(X); + int g(X); + int h(X); +} + +// module \tcode{M} interface +module; +#include "foo.h" +export module M; +// \tcode{N::f} is reachable via argument-dependent name lookup result +// in context of template definition +template int use_f() { N::X x; f(x); } +// \tcode{N::g} is not reachable because \tcode{g} is a dependent name +// in context of template definition +template int use_g() { N::X x; g((T(), x)); } +// \tcode{N::h} is reachable because \tcode{use_h} has a point of +// instantiation in the module unit \tcode{M} +template int use_h() { N::X x; h((T(), x)); } +int k = use_h(); + +// module \tcode{M} implementation +module M; +int a = use_f(); // ok +int b = use_g(); // error: no viable function for call to \tcode{g} +int c = use_h(); // ok +\end{codeblock} +\end{example} + +%% Changes: entities now include their declaration context in their basis. +%% We need to retain those contexts so we can mangle the entity. + +\alinea +The \term{basis} of a declaration $D$ is a set of entites determined as follows: +\begin{itemize} +\item If $D$ declares a \grammarterm{typedef-name}, the basis is the +type-basis of the aliased type. + +\item If $D$ declares a variable or function, +the basis is the union of +the type-basis of the type of that variable or function +and the set containing the +innermost enclosing namespace, class, or function. + +\item If $D$ defines a class type, the basis is the union of the +type-bases of its direct base classes (if any), and the bases of +its \grammarterm{member-declaration}{s}, +and the set containing the +innermost enclosing namespace, class, or function. + +\item If $D$ is a \grammarterm{template-declaration}, +the basis is the union +of +\begin{itemize} +\item +the basis of its \grammarterm{declaration}, +\item +the set of entities (if any) designated by +the default template arguments for +non-type template parameters and template template parameters, +\item +the type-bases of the default type template arguments, +\item +the set containing the +innermost enclosing namespace, class, or function, and +\item +if $D$ declares a partial specialization, +the set containing the primary template. +\end{itemize} + +\item If $D$ is an \grammarterm{explicit-instantiation} +or an \grammarterm{explicit-specialization}, the basis includes +the primary template and all the entities in the basis of the +\grammarterm{declaration} of $D$. + +\item If $D$ is a \grammarterm{namespace-definition}, the basis comprises +the innermost enclosing namespace, if any. + +\item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is the +singleton consisting of the namespace denoted by the +\grammarterm{qualified-namespace-specifier}. + +\item If $D$ is a \grammarterm{using-declaration}, the basis is the union +of the bases of all the declarations introduced by +the \grammarterm{using-declarator}{s}. + +\item If $D$ is an \grammarterm{alias-declaration}, +the basis is the type-basis of its \grammarterm{defining-type-id}. + +\item Otherwise, the basis is empty. +\end{itemize} + +The \term{type-basis} of a type $T$ is +\begin{itemize} +\item If $T$ is a cv-qualified type, the type-basis is the type-basis of +the unqualified type. +\item If $T$ is a member of an unknown specialization, the type-basis +is the type-basis of that specialization. +\item If $T$ is a class template specialization, the type-basis +is the set consisting of +\begin{itemize} +\item the primary template, and +\item the entities designated by +non-type template arguments and +template template arguments (if any), and +\item the elements of the type-bases +of the type template arguments (if any). +\end{itemize} +\item If $T$ is a class type or an enumeration type, +the type-basis is the singleton $\{ T \}$. +\item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the +type-basis is the type-basis of $U$. +\item If $T$ is a function type, the type-basis is the union of the +type-basis of the return type and the type-bases of the parameter types. +\item If $T$ is a pointer to data member of a class $X$, the type-basis is +the union of the type-basis of $X$ and the type-basis of member type. +\item If $T$ is a pointer to member function type of a class $X$, the +type-basis is the union of the type-basis of $X$ and the type-basis of +the function type. +\item Otherwise, the type-basis is the empty set. +\end{itemize} + +A non-type template argument for a template parameter of pointer type +that is not value-dependent designates the entity (if any) that the +pointer points to. +A non-type template argument for a template parameter of reference type +that is not value-dependent designates the entity that the argument +denotes. +Other non-type template arguments do not designate an entity. + +\alinea +\begin{note} +The basis of a declaration +does not include entities used in expressions, +other than those designated by non-type template arguments. +\begin{example} +\begin{codeblock} +const int size = 2; +int ary1[size]; // \tcode{size} not in \tcode{ary1}'s basis +constexpr int identity(int x) { return x; } +int ary2[identity(2)]; // \tcode{identity} not in \tcode{ary2}'s basis + +template struct S; +template struct S2; +constexpr int g(int); + +template +S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2}, \mathtt{::} \}$ +\end{codeblock} +\end{example} +\end{note} + +\alinea +The \term{interface purview} of a module unit +is its purview excluding any \grammarterm{private-module-fragment}. + +\alinea +Certain declarations in a global module fragment are \term{referenced}. +Given an +\grammarterm{identifier}, +\grammarterm{unqualified-id}, +or expression +in an interface purview or +in a template instantiation whose point of instantiation is in that interface purview: +\begin{itemize} +\item +For an \grammarterm{identifier} or \grammarterm{unqualified-id}, +if name lookup for it finds a unique result, +the declaration found is referenced. +\item +For an expression, +the declarations of any function named by it are referenced. +\item +For an expression that governs name lookup for a dependent name, +consider an expression synthesized from it +by replacing each type-dependent argument +with a value of a placeholder type +with no associated namespaces or entities. +All declarations found by name lookup +for the corresponding name +in the synthesized expression are referenced. +\end{itemize} +The declarations of entities in the basis of a referenced declaration are referenced, recursively. +\end{std.txt} + +\rSec1[module.context]{Instantiation context} + +\begin{std.txt}\color{addclr} +\resetalinea[0] +\alinea +The \term{instantiation context} is a set of locations within the program +that determines which names are visible to argument-dependent name lookup +(\ref{basic.lookup.argdep}) +and which declarations are reachable (\ref{module.reach}) +in the context of a particular declaration or template instantiation. +The instantiation context depends on how the declaration was formed, +or where the template instantiation was referenced. + +\alinea +During the implicit definition of a defaulted special member function +(\stdref{special}{10.2.3}), +the instantiation context is the union of +the instantiation context from the definition of the class and +the instantiation context of the program construct that +resulted in the implicit definition of the special member function. + +\alinea +During the implicit instantiation of a template +whose point of instantiation is specified as +that of an enclosing specialization (\stdref{temp.point}{12.7.4.1}), +the instantiation context is the union of +the instantiation context of the enclosing specialization and, +if the template is defined in a module interface unit of a module $M$ +and the point of instantiation is not in a module interface unit of $M$, +the point at the end of the +\grammarterm{top-level-declaration-seq} of the +primary module interface unit of $M$ +(prior to the \grammarterm{private-module-fragment}, +if one is present). + +\alinea +During the implicit instantiation of a template +that is implicitly instantiated because it is referenced +from within the implicit definition of a defaulted special member function, +the instantiation context is the instantiation context of +the defaulted special member function. + +\alinea +During the instantiation of any other template specialization, +the instantiation context comprises the point of instantiation +of the template. + +\alinea +In any other case, the instantiation context at a program point comprises +that program point. + +\alinea +\begin{example} +\begin{codeblock} +// translation unit \#1 +export module stuff; +export template void foo(T, U u) { auto v = u; } +export template void bar(T, U u) { auto v = *u; } + +// translation unit \#2 +export module M1; +import "defn.h"; // provides \tcode{struct X \{\};} +import stuff; +export template void f(T t) { + X x; + foo(t, x); +} + +// translation unit \#3 +export module M2; +import "decl.h"; // provides \tcode{struct X;} (not a definition) +import stuff; +export template void g(T t) { + X *x; + bar(t, x); +} + +// translation unit \#4 +import M1; +import M2; +void test() { + // OK: the instantiation context of \tcode{foo} comprises + // the point at the end of translation unit \#1, + // the point at the end of translation unit \#2, and + // the point of the call to \tcode{f(0)} below, so + // the definition of \tcode{X} is reachable (\ref{module.reach}) + f(0); + + // the instantiation context of \tcode{foo} comprises + // the point at the end of translation unit \#1, + // the point at the end of translation unit \#3, and + // the point of the call to \tcode{g(0)} below, so + // the definition of \tcode{X} is not necessarily reachable + g(0); +} +\end{codeblock} +\end{example} +\end{std.txt} + +\rSec1[module.reach]{Reachability} + +\begin{std.txt}\color{addclr} +\resetalinea[0] +\alinea +A translation unit is \term{reachable} from a program point if +it is a module interface unit on which the translation unit containing the +program point has an interface dependency, or +it is a translation unit that the translation unit containing the +program point imports, +prior to that program point (\ref{module.import}). +\enternote +While module interface units are reachable even when they are only +transitively imported via a non-exported import declaration, +namespace-scope names from such module interface units are not visible +to name lookup (\ref{basic.scope.namespace}). +\exitnote + +\alinea +It is unspecified whether additional translation units on which the +program point has an interface dependency are considered reachable, +and under what circumstances.% +\footnote{Implementations are not required to prevent the semantic effects of +additional translation units involved in the compilation from being +observed.} +Programs intended to be portable should avoid +depending on the reachability of any additional translation units. + +\alinea +A declaration is \term{reachable} if, for any program point in the +instantiation context (\ref{module.context}), +\begin{itemize} +\item it appears prior to that program point in the same translation unit, or +\item it is not discarded (\ref{module.global}), +appears in a translation unit that is reachable from that program point, +and +either does not appear within a \grammarterm{private-module-fragment} +or appears in a \grammarterm{private-module-fragment} +of the module containing the program point. +\end{itemize} +\enternote +Whether a declaration is exported has no bearing on whether it is reachable. +\exitnote + +\alinea +The \term{reachable semantic properties} of an entity within a context +are the accumulated properties of all reachable declarations of +that entity, and determine the behavior of the entity within +that context. +\enternote +These reachable semantic properties include type completeness, +type definitions, initializers, +default arguments of functions or template declarations, attributes, +visibility of class or enumeration member names to ordinary lookup, +etc. +Since default arguments are evaluated in the context of the call expression, +the reachable semantic properties of the corresponding parameter types apply in +that context. +\begin{example} +\begin{codeblock} +// translation unit \#1 +export module M:A; +export struct B; + +// translation unit \#2 +module M:B; +struct B { + operator int(); +}; + +// translation unit \#3 +module M:C; +import :A; +B b1; // error: no reachable definition of \tcode{struct B} + +// translation unit \#4 +export module M; +export import :A; +import :B; +B b2; + +// translation unit \#5 +module X; +import M; +B b3; // error: no reachable definition of \tcode{struct B} +\end{codeblock} +\end{example} +\exitnote + +\alinea +\enternote +The reachable semantic properties for an entity attached to a module $M$ +are the same for all contexts outside that module in which the entity +can be referenced, irrespective of whether $M$ is directly or indirectly +imported. +\exitnote + +\alinea +\enternote +An entity can have reachable declarations and therefore +reachable semantic properties even if it is not visible +to name lookup. +\exitnote +\begin{example} +\begin{codeblock} +export module A; +struct X {}; +export using Y = X; + +module B; +import A; +Y y; // OK, definition of \tcode{X} is reachable +X x; // ill-formed: \tcode{X} not visible to unqualified lookup +\end{codeblock} +\end{example} + +\begin{before}\color{addclr} + \alinea + Within a module interface unit, it is necessary to determine that the + declarations being exported collectively present a coherent view of + the semantic properties of the entities they reference. This determination + is based on the semantic properties of attendant entities. + \enternote + The reachable semantics properties of an entity, the declarations of which + are made available via a \grammarterm{module-import-declaration}, are + determined by its owning module and are unaffected by the importing module. +\end{before}\begin{before}\color{addclr} + \begin{example} + \begin{codeblock} + // module interface of M1 + export module M1; + export struct S { }; + + // module interface of M2 + import M1; + export module M2; + export S f(); // \#1 + export S* g(); // \#2 + + // elsewhere + import M2; + auto x = f(); // OK: completeness of S obtained at \#1 + auto y = *g(); // OK: completeness of S obtained at \#2 + \end{codeblock} + \end{example} + \exitnote +\end{before}\begin{before}\color{addclr} + For each declaration $D$ exported from the module interface unit of a module $M$, + there is a set of zero or more + \term{attendant entities} defined as follows: + \begin{itemize} + \item If $D$ is a type alias declaration, then the attendant entities + of $D$ are those determined by the aliased type at the point of the + declaration $D$. + + \item If $D$ is a \grammarterm{using-declaration}, the set of attendant entities + is the union of the sets of attendant entities of the declarations introduced by + $D$ at the point of the declaration. + + \item If $D$ is a template declaration, the set of attendant entities is + the union of the set of attendant entities + of the declaration being parameterized, the set of attendant entities + determined by the default type template arguments (if any), + and the set consisting of + the entities (if any) designated by the default template template argument, + the default non-type template arguments (if any). + + \item if $D$ has a type $T$, the set of attendant entities is the set of + attendant entities determined by $T$ at the point of declaration. + + \item Otherwise, the set of attendant entities is empty. + \end{itemize} +\end{before}\begin{before}\color{addclr} + The \term{set of attendant entities determined by} a type $T$ is defined as follows + (exactly one of these cases matches): + \begin{itemize} + \item\color{addclr} If $T$ is a fundamental type, then + the set of attendant entities is empty. + + % \item\color{addclr} If $T$ is a dependent type denoted by a \grammarterm{typename-specifier} + % where the \grammarterm{nested-name-specifier} itself denotes a dependent type, + % then the set of attendant entities is the set of attendant entities determined by + % that type. + \item\color{addclr} If $T$ is a member of an unknown specialization, the set of + attendant entities is the set of attendant entities determined by that + unknown specialization. + + \item\color{addclr} If $T$ is a class type owned by $M$, the set of attendant entities includes + $T$ itself, the union of the sets of the attendant entities determined + by its direct base classes owned by $M$, the sets of the + attendant entities of its data members, static data member templates, + member functions, member function templates, + the function parameters of its constructors and constructor templates. + Furthermore, if $T$ is a + class template specialization, the set of attendant entities also + includes: the class template if it is owned by $M$, + the union of the sets of attendant entities determined by the type + template-arguments, the sets of the attendant entities of the templates + used as template template-arguments, the sets of the attendant entities + determined by the types of the non-type template-arguments. + + \item\color{addclr} If $T$ is an enumeration type owned by $M$, + the set of attendant entities is the singleton $\{T\}$. + + \item\color{addclr} If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, + the set of attendant entities is the set of attendant entities determined by $U$. + + \item\color{addclr} If $T$ is a function type, the set of attendant entities is the + union of the set of attendant entities determined by the function + parameter types and the return type. + + \item\color{addclr} if $T$ is a pointer to data member of class $X$, the set of attendant + entities is the union of the set of attendant entities of the member type + and the set of attendant entities determined by $X$. + + \item\color{addclr} If $T$ is a pointer to member function type of a class $X$, the + set of attendant entities is the union of the set of attendant entities + determined by $X$ and the set of attendant entities determined by + the function type. + + \item\color{addclr} Otherwise, the set of attendant entities is empty. + \end{itemize} +\end{before}\begin{before}\color{addclr} + If a class template $X$ is an attendant entity, then its reachable semantic + properties include all the declarations of the primary class template, + its partial specializations, and its explicit specializations in the + containing module interface unit. + If a complete class type $X$ is an attendant entity, then its reachable + semantic properties include the declarations of its nested types but + not the definitions of the types denoted by those members + unless those definitions are exported. + Furthermore, if $X$ is an attendant entity of an + exported declaration $D$, then its reachable semantic properties are + restricted to those defined by the exported declarations of $X$ + (if $X$ is introduced by an exported declaration), or by + the semantic properties of $X$ available at the point of the declaration $D$. + \enternote + If $X$ is a complete class type that is an attendant entity, its nested types + (including nested enumerations and associated enumerators) + and member class templates + are not considered attendant entities unless they are determined attendant + entities by one of the rules above. Attendant entities allow type checking + of direct member selection of an object even if that object's type isn't exported. + Declarations, such as \grammarterm{asm-declaration} or + \grammarterm{alias-declaration} or + \grammarterm{static\_assert-declaration}, + that do not declare entities do not contribute to the set of attendant entities. + \exitnote + \begin{example} + \begin{codeblock} + export module M; + export struct Foo; // Foo exported as incomplete type + struct Foo { }; + export using ::Foo; // OK: exports complete type Foo + + struct C { }; + struct S { + struct B { }; + using C = ::C; + int i : 8; + double d { }; + }; + + export S f(); // S attendant entity of f(). + + // translation unit 2 + import M; + int main() { + int x = sizeof(decltype(f())::B); // error: incomplete B + int y = sizeof(decltype(f())::C); // error: incomplete C + decltype(f()) s { }; + s.d = 3.14; // OK + return &s.i != nullptr; // error: cannot take address of bitfield + } + \end{codeblock} + \end{example} +\end{before}\begin{before}\color{addclr} + \alinea + If $X$ is an attendant entity of two exported declarations + designating two distinct entities, + %\begin{after}\color{addclr} + and $X$ is declared in the purview of the global module, + %\end{after} + its reachable semantic properties shall + be the same at the points where the declarations occur. + %\begin{before}\color{addclr} + \begin{example} + \begin{codeblock} + export module M; + struct S; + export S f(); // \#1 + struct S { }; + export S g(); // error: class type S has different properties from \#1 + \end{codeblock} + \end{example} + %\end{before} + +% \begin{after}\color{addclr} +% \begin{example} +% \begin{codeblock} +% module; +% struct S; +% export module M; +% export S f(); // \#1 +% extern "C++" struct S { }; +% export S g(); // error: class type S has different properties from \#1 +% \end{codeblock} +% \end{example} +% \end{after} +\end{before} +\end{std.txt} From ccf66be7a0ac30155e2d1fe5148b856a65f8f5a8 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 26 Nov 2018 22:38:18 -0800 Subject: [PATCH 46/77] Take a snapshot as P1103R2. --- src/bg.tex | 51 +++++++++++++++++++++++++++++++++++++++++--------- src/config.tex | 2 +- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index 8ed7e97..04580ff 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -354,6 +354,48 @@ \rSec0[vs]{Comparison to prior proposals} +\rSec1[vs.r1]{Changes since R1} + +\pnum +This section lists changes to the design of the merged modules proposal +since P1103R1. + +\rSec2[vs.r1.p1299r2]{P1299R2: Module preamble is unnecessarily fragile} + +\pnum +Prior revisions of this proposal prohibited macros imported from header +units from affecting the set of imports of a module. However, the +complexity of the resulting rule -- for both users and implementations +-- was not considered to be justified by the expected benefit for +tools wishing to perform dependency extraction, so this rule has been +removed. + +\pnum +In this proposal, macros imported from a header unit become available +immediately after the import as described in \ref{vs.r0.preamble}, +but unlike in R0, such macros can be expanded prior to later +imports in the preamble of a module unit. + +\rSec2[vs.r1.p1242r1]{P1242R1: Single-file modules} + +\pnum +As described in \ref{vs.ts}, this proposal removes the +Modules TS ``attendant entities'' rule. +This left a feature vacuum: +there was no longer a way to define a module entirely in a single file +without module implementation details being available outside the module. + +\pnum +In this proposal, a complete module +(with both interface and implementation) +can be defined in a single source file +by separating the interface from the implementation +with a +\begin{codeblock} +module :private; +\end{codeblock} +marker. + \rSec1[vs.r0]{Changes since R0} \pnum @@ -501,15 +543,6 @@ This proposal uses a simpler rule: imported macros become visible immediately after the import declaration. -\pnum -In order to make it practical to determine the set of imports of a -module unit without first compiling the imported legacy header units -(at least for a module unit with no global module fragment), -an additional restriction is imposed: -the program is ill-formed if, after reaching the preamble, -an imported macro is expanded -and then another import declaration is encountered. - \rSec1[vs.ts]{Changes to the Modules TS} \pnum diff --git a/src/config.tex b/src/config.tex index a3f0ca0..52bd22f 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,7 +1,7 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{D1103R2} +\newcommand{\docno}{P1103R2} \newcommand{\prevdocno}{P1103R1} %\newcommand{\cppver}{201703L} From 63d551da33aaa385416fbabf008eba4604006293 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 26 Nov 2018 22:39:21 -0800 Subject: [PATCH 47/77] Prepare for papers after R2 --- src/config.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config.tex b/src/config.tex index 52bd22f..a1b462c 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,8 +1,8 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{P1103R2} -\newcommand{\prevdocno}{P1103R1} +\newcommand{\docno}{D1103R3} +\newcommand{\prevdocno}{P1103R2} %\newcommand{\cppver}{201703L} %% Title From 78e465074b4f95cdcc445faf12755d068571cb4d Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 30 Jan 2019 12:57:03 -0800 Subject: [PATCH 48/77] Partially synchronize packages and macros with working draft. --- src/macros.tex | 2 +- src/ts.tex | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/macros.tex b/src/macros.tex index 43515aa..27cfa6a 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -231,7 +231,7 @@ %% Double underscore \newcommand{\ungap}{\kern.5pt} -\newcommand{\unun}{\_\ungap\_} +\newcommand{\unun}{\textunderscore\ungap\textunderscore} \newcommand{\xname}[1]{\unun\ungap#1} \newcommand{\mname}[1]{\tcode{\unun\ungap#1\ungap\unun}} diff --git a/src/ts.tex b/src/ts.tex index eccbf9e..faadc63 100644 --- a/src/ts.tex +++ b/src/ts.tex @@ -13,20 +13,19 @@ {listings} % code listings \usepackage{longtable} % auto-breaking tables \usepackage{ltcaption} % fix captions for long tables -\usepackage{booktabs} % fancy tables \usepackage{relsize} % provide relative font size changes +\usepackage{textcomp} % provide \text{l,r}angle \usepackage{underscore} % remove special status of '_' in ordinary text -\usepackage{verbatim} % improved verbatim environment \usepackage{parskip} % handle non-indented paragraphs "properly" \usepackage{array} % new column definitions for tables \usepackage[normalem]{ulem} +\usepackage{enumitem} \usepackage{color} % define colors for strikeouts and underlines \usepackage{amsmath} % additional math symbols \usepackage{mathrsfs} % mathscr font -\usepackage{microtype} +\usepackage[final]{microtype} \usepackage{multicol} -\usepackage{xspace} -\usepackage{fixme} +\usepackage{xspace} % FIXME: removed from WP \usepackage{lmodern} \usepackage[T1]{fontenc} \usepackage[pdftex, final]{graphicx} @@ -45,10 +44,16 @@ plainpages=false ]{hyperref} \usepackage{memhfixc} % fix interactions between hyperref and memoir -\usepackage{xstring} -\usepackage{tcolorbox} -\usepackage{environ} -%\tcbuselibrary{breakable} +%\usepackage[active,header=false,handles=false,copydocumentclass=false,generate=std-gram.ext,extract-cmdline={gramSec},extract-env={bnf,simplebnf}]{extract} % Grammar extraction +\usepackage{expl3} +\usepackage{xparse} +\usepackage{environ} % FIXME: remove + +\pdfminorversion=5 +\pdfcompresslevel=9 +\pdfobjcompresslevel=2 + +\renewcommand\RSsmallest{5.5pt} % smallest font size for relsize \input{layout} \input{styles} From ccf7a9c75d62233948a3a338699b231e2fe9d840 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 30 Jan 2019 13:54:37 -0800 Subject: [PATCH 49/77] Update context-sensitive header-name formation rule and rewrite macro import rules for clarity. --- src/lexical.tex | 19 +++- src/macros.tex | 2 +- src/preprocessor.tex | 212 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 182 insertions(+), 51 deletions(-) diff --git a/src/lexical.tex b/src/lexical.tex index bc48c1c..591d0b9 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -72,11 +72,20 @@ even if that would cause further lexical analysis to fail, except that a \grammarterm{header-name} (5.8) is only formed -within a \tcode{\#include} directive (19.2) -\added{or when the previous preprocessing token -was lexically identical to the -\grammarterm{identifier} \tcode{import} -and the preprocessing tokens are separated by white space.} +\begin{itemize} +\item +within a \tcode{\#include} directive (19.2)\added{,} + +\item +\added{within a \grammarterm{has-include-expression}, or} + +\item +\added{outside of any preprocessing directive, +if applying phase 4 of translation to the sequence +of preprocessing tokens produced thus far +is valid and +results in an \grammarterm{import-seq} (\ref{cpp.module}).} +\end{itemize} \end{std.txt} \end{after} diff --git a/src/macros.tex b/src/macros.tex index 27cfa6a..c3e6909 100644 --- a/src/macros.tex +++ b/src/macros.tex @@ -188,7 +188,7 @@ %% Cross reference \newcommand{\xref}{\textsc{See also:}\xspace} \newcommand{\xsee}{\textsc{See:}\xspace} -\newcommand{\stdref}[2]{#2} +\newcommand{\stdref}[2]{#2 [#1]} %% NTBS, etc. \newcommand{\NTS}[1]{\textsc{#1}\xspace} diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 67c1f52..cc8432b 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -20,6 +20,61 @@ \end{std.txt} \end{after} +\setcounter{section}{0} +\rSec1[cpp.cont]{Conditional inclusion}% + +Modify the grammar before 14.1/1 as follows: + +\begin{std.txt} +\begin{bnf} +\added{\nonterminal{header-name-tokens}:}\br + \added{string-literal}\br + \added{\terminal{<} h-pp-tokens \terminal{>}} +\end{bnf} + +\begin{bnf} +\nonterminal{has-include-expression}:\br + % FIXME: Need \textunderscore: underscore package does not work inside \added / \removed! + \removed{\terminal{\xname{has\textunderscore{}include}} \terminal{(} \terminal{<} h-char-sequence \terminal{>} \terminal{)}}\br + \removed{\terminal{\xname{has\textunderscore{}include}} \terminal{(} \terminal{"} q-char-sequence \terminal{"} \terminal{)}}\br + \added{\terminal{\xname{has\textunderscore{}include}} \terminal{(} header-name \terminal{)}}\br + \removed{\terminal{\xname{has\textunderscore{}include}} \terminal{(} string-literal \terminal{)}}\br + \removed{\terminal{\xname{has\textunderscore{}include}} \terminal{(} \terminal{<} h-pp-tokens \terminal{>} \terminal{)}}\br + \added{\terminal{\xname{has\textunderscore{}include}} \terminal{(} header-name-tokens \terminal{)}}\br +\end{bnf} +\end{std.txt} + +Modify paragraph 14.1/2 as follows: + +\begin{std.txt} +\resetalinea[1] +\alinea +A \grammarterm{defined-macro-expression} evaluates to \tcode{1} +if the identifier is currently defined as a macro name +(that is, if it is predefined or if +\added{it has one or more active macro definitions (\ref{cpp.module}), +for example because} +it has been the subject of a \tcode{\#define} preprocessing directive +without an intervening \tcode{\#undef} directive with the same subject +identifier), +\tcode{0} if it is not. + +\end{std.txt} + +Modify paragraph 14.1/3 as follows: + +\begin{std.txt} +\resetalinea[2] +\alinea +The \removed{third and fourth forms} +\added{second form} +of \grammarterm{has-include-expression} +\removed{are} \added{is} considered +only if \removed{neither of} the first \removed{or second forms matches} +\added{form does not match}, +in which case the preprocessing tokens are processed just as in normal text. +\end{std.txt} + \setcounter{section}{1} \rSec1[cpp.include]{Source file inclusion}% @@ -76,31 +131,53 @@ \begin{std.txt} \color{addclr} +\begin{bnf} +\nonterminal{import-seq}:\br + \grammarterm{top-level-token-seq}\opt{} \terminal{export}\opt{} \terminal{import} +\end{bnf} + +\begin{bnf} +\nonterminal{top-level-token-seq}:\br + \descr{any \nonterminal{pp-balanced-token-seq} ending in \terminal{;} or \terminal{\}}} +\end{bnf} + \begin{bnf} \nonterminal{pp-import}:\br - \terminal{import} header-name pp-decl-suffix\opt{} \terminal{;} + \terminal{import} header-name pp-import-suffix\opt{} \terminal{;}\br + \terminal{import} header-name-tokens pp-import-suffix\opt{} \terminal{;} +\end{bnf} + +\begin{bnf} +\nonterminal{pp-import-suffix}:\br + pp-import-suffix-token\br + pp-import-suffix pp-import-suffix-token +\end{bnf} + +\begin{bnf} +\nonterminal{pp-import-suffix-token}:\br + \descr{any \grammarterm{pp-balanced-token} other than \terminal{;}} \end{bnf} \begin{bnf} -\nonterminal{pp-decl-suffix}:\br - pp-decl-suffix\opt{} pp-decl-suffix-token\br - pp-decl-suffix\opt{} \terminal{[} pp-bracketed-tokens \terminal{]} +\nonterminal{pp-balanced-token-seq}:\br + pp-balanced-token\br + pp-balanced-token-seq pp-balanced-token \end{bnf} \begin{bnf} -\nonterminal{pp-decl-suffix-token}:\br - \descr{any \grammarterm{preprocessing-token} other than \terminal{[}, \terminal{]}, or \terminal{;}} +\nonterminal{pp-balanced-token}:\br + pp-ldelim pp-balanced-token-seq\opt{} pp-rdelim\br + \descr{any \grammarterm{preprocessing-token} other than a \nonterminal{pp-ldelim} or \nonterminal{pp-rdelim}} \end{bnf} \begin{bnf} -\nonterminal{pp-bracketed-tokens}:\br - pp-bracketed-tokens\opt{} pp-bracketed-token\br - pp-bracketed-tokens\opt{} \terminal{[} pp-bracketed-tokens \terminal{]} +\nonterminal{pp-ldelim:} \descr{one of}\br + \terminal{( [ \{ <: <\%} \end{bnf} \begin{bnf} -\nonterminal{pp-bracketed-token}:\br - \descr{any \grammarterm{preprocessing-token} other than \terminal{[} or \terminal{]}} +\nonterminal{pp-rdelim:} \descr{one of}\br + \terminal{) ] \} :> \%>} \end{bnf} \color{addclr} @@ -109,6 +186,10 @@ of a \grammarterm{pp-import} instructs the preprocessor to import macros from the header unit (\ref{module.import}) denoted by the \grammarterm{header-name}. +A \grammarterm{pp-import} is only recognized when the sequence of tokens +produced by phase 4 of translation up to the \tcode{import} token +forms a \grammarterm{import-seq}, and the \tcode{import} token is not +within the \grammarterm{pp-import-suffix} of another \grammarterm{pp-import}. The \tcode{;} \grammarterm{preprocessing-token} shall not be produced by macro replacement (\stdref{cpp.replace}{14.3}). The \term{point of macro import} for a \grammarterm{pp-import} is @@ -116,48 +197,89 @@ \color{addclr} \alinea -A \term{macro directive} for a macro name is a \tcode{\#define} or -\tcode{\#undef} directive naming that macro name. -An \term{exported macro directive} is -a macro directive occuring in a header unit -\color{addclr} -whose macro name is not lexically identical to a keyword. -A macro directive is \term{visible} at a source location -if it precedes that source location in the same translation unit, or -if it is an exported macro directive whose header unit, -or a header unit that -\color{addclr} -transitively imports it, -is imported into the current translation unit by a \grammarterm{pp-import} -whose point of macro import precedes that source location. +In the second form of \grammarterm{pp-import}, +a \grammarterm{header-name} token is formed as if +the \grammarterm{header-name-tokens} +were the \grammarterm{pp-tokens} of a \tcode{\#include} directive. +The \grammarterm{header-name-tokens} are replaced by +the \grammarterm{header-name} token. +\begin{note} +This ensures that imports are treated consistently by +the preprocessor and later phases of translation. +\end{note} +\color{addclr} \alinea -Multiple macro directives for a macro name may be visible at the same -source location. -The interpretation of a macro name is determined as follows: +Each \tcode{\#define} directive encountered when preprocessing +each translation unit in a program results in a distinct +\term{macro definition}. +Importing macros from a header unit makes macro definitions +from a translation unit visible in other translation units. +Each macro definition has at most one point of definition in +each translation unit and at most one point of undefinition, as follows: \begin{itemize} \item -\color{addclr} -A macro directive \term{overrides} all macro directives for the same name -that are visible at the point of the directive. -\item -\color{addclr} -A macro directive is \term{active} if it is visible and -no visible macro directive overrides it. +The \term{point of definition} of a macro definition within a translation unit +is the point at which its \tcode{\#define} directive occurs (in the translation +unit containing the \tcode{\#define} directive), or, +if the macro name is not lexically identical to a keyword (\stdref{lex.key}{5.11}) +or to the \grammarterm{identifier}{s} \tcode{module} or \tcode{import}, +the first point +of macro import of a translation unit containing a point of definition for the +macro definition, if any (in any other translation unit). + \item -\color{addclr} -A set of macro directives is \term{consistent} if it consists of only -\tcode{\#undef} directives or if all \tcode{\#define} directives in the set -are valid as redefinitions of the same macro. +The \term{point of undefinition} of a macro definition within a translation unit +is the first point at which a \tcode{\#undef} directive naming the macro occurs +after its point of definition, or the first point +of macro import of a translation unit containing a point of undefinition for the +macro definition, whichever (if any) occurs first. \end{itemize} -\color{addclr} -When a \grammarterm{preprocessing-token} matching the macro name of a visible -macro directive is encountered, the set of active macro directives for that -macro name shall be consistent, and semantics of the active macro directives -determine whether the macro name is defined and the behavior of macro -replacement. + +\alinea +A macro directive is \term{active} at a source location +if it has a point of definition in that translation unit preceding the location, +and does not have a point of undefinition in that translation unit preceding +the location. + +\alinea +If a macro would be replaced or redefined, and multiple macro definitions +are active for that macro name, the active macro definitions shall all be +valid redefinitions of the same macro (\stdref{cpp.replace}{14.3}). \enternote The relative order of \grammarterm{pp-import}{s} has no bearing on whether a particular macro definition is active. \exitnote + +\alinea +\begin{example} +\begin{codeblock} +// translation unit a.h +#define X 123 // \#1 +#define Y 45 // \#2 +#define Z a // \#3 +#undef X // point of undefinition of \#1 in \tcode{a.h} +\end{codeblock} + +\begin{codeblock} +// translation unit b.h +import "a.h"; // point of definition of \#1, \#2, and \#3, point of undefinition of \#1 in \tcode{b.h} +#define X 456 // OK, \#1 is not active +#define Y 6 // ill-formed; \#2 is active +\end{codeblock} + +\begin{codeblock} +// translation unit c.h +#define Y 45 // \#4 +#define Z c // \#5 +\end{codeblock} + +\begin{codeblock} +// translation unit d.h +import "a.h"; // point of definition of \#1, \#2, and \#3, point of undefinition of \#1 in \tcode{d.h} +import "c.h"; // point of definition of \#4 and \#5 in \tcode{d.h} +int a = Y; // OK, active macro definitions \#2 and \#3 are valid redefinitions +int c = Z; // ill-formed; active macro definitions \#2 and \#3 are not valid redefinitions of \tcode{Z} +\end{codeblock} +\end{example} \end{std.txt} From c71adbe71f5c3ab0f9fa5a79ad02b161a74020d7 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 31 Jan 2019 12:52:59 -0800 Subject: [PATCH 50/77] Remove some fixed FIXMEs and commented-out code. --- src/lexical.tex | 4 -- src/modules.tex | 143 ------------------------------------------------ 2 files changed, 147 deletions(-) diff --git a/src/lexical.tex b/src/lexical.tex index 591d0b9..62bef61 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -59,10 +59,6 @@ \setcounter{section}{3} \Sec1[lex.pptoken]{Preprocessing tokens} -\textbf{\color{red}FIXME: The following change is a placeholder; the final rule for -context-sensitive lexing of \grammarterm{header-name} tokens -after \tcode{import} tokens is still under development.} - Modify bullet 3 of paragraph 5.4/3 as follows: \begin{std.txt} diff --git a/src/modules.tex b/src/modules.tex index df3bf18..136f038 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -579,85 +579,6 @@ \end{Program} \end{example} -% FIXME -% \alinea -% \begin{after}\color{addclr} -% Importing a translation unit $M$ -% \end{after} -% makes every citation and every -% %\begin{before}\color{addclr} -% exported declaration -% %\end{before} -% %\begin{after}\color{addclr} -% %exported name -% %\end{after} -% from the -% abstract semantics graph of $M$ available, as a citation, -% %makes exported declarations from the interface of the nominated module visible -% to name lookup in -% the current translation unit, in the same namespaces and contexts -% as in $M$. -% % the nominated module. -% \begin{after}\color{addclr} -% If $M$ is part of the same module as the importing translation unit, -% importing $M$ also makes every name declared in the purview of $M$ -% that does not have internal linkage visible to name lookup -% in the current translation unit, in the same namespaces and contexts -% as in $M$. -% \end{after} -% \begin{before}\color{addclr} -% A \term{citation} for a declaration attached to a module $M$ is a pair of -% $M$ and the corresponding declset from the abstract semantics graph -% of $M$. -% \end{before} -% \begin{after}\color{addclr} -% A \term{citation} for a declaration in a translation unit $M$ is a pair of -% $M$ and the corresponding declset from the abstract semantics graph -% of $M$. -% \end{after} -%% The \grammarterm{attribute-specifier-seq} appartain to the nominated module. -% \enternote -% The declarations in the declsets and the entities denoted by the declsets -% are not redeclared in the translation unit -% containing the \grammarterm{module-import-declaration}. -% \exitnote - -% FIXME -% \begin{after}\color{addclr} -% \alinea -% \enternote -% A \grammarterm{module-import-declaration} also makes all -% declarations in the purview of the module interface units of $M$ -% reachable in the current translation unit, and may make declarations -% from the preamble of $M$ reachable in the current translation -% unit, as described in \ref{module.reach}. -% \exitnote -% \end{after} -% \begin{example} -% \begin{Program} -% // Interface unit of M -% export module M; -% export namespace N { -% struct A { }; -% } -% namespace N { -% struct B { }; -% export struct C { -% friend void f(C) { } // exported, visible only through argument-dependent lookup -% }; -% } -% -% // Translation unit 2 -% import M; -% N::A a { }; // OK. -% N::B b { }; // error: `B' not found in N. -% void h(N::C c) { -% f(c); // OK: `N::f' found via argument-dependent lookup -% N::f(c); // error: `f' not found via qualified lookup in N. -% } -% \end{Program} -% \end{example} - \alinea A module implementation unit of a module \tcode{M} that is not a module partition @@ -712,70 +633,6 @@ \end{before} \end{std.txt} -%\begin{before} -%\rSec1[module.proclaim]{Proclaimed ownership declaration}% -% -%\begin{std.txt}\color{addclr} -% \begin{bnf}\color{addclr} -% \nonterminal{proclaimed-ownership-declaration}:\br -% \terminal{extern} \terminal{module} module-name \terminal{:} declaration -% \end{bnf} -% -% \resetalinea[0] -% \alinea -% A \grammarterm{proclaimed-ownership-declaration} shall only appear -% at namespace scope. -% It shall not appear directly or indirectly within an unnamed namespace. -% A \grammarterm{proclaimed-ownership-declaration} has the declarative effects -% of its \grammarterm{declaration}. -% The \grammarterm{declaration} shall declare at -% least one name, and the \grammarterm{decl-specifier-seq} (if any) -% of the \grammarterm{declaration} shall not contain \tcode{static}. -% The \grammarterm{declaration} shall not be a \grammarterm{namespace-definition}, -% an \grammarterm{export-declaration}, -% or a \grammarterm{proclaimed-ownership-declaration}. -% The \grammarterm{declaration} shall not be a defining declaration -% (\ref{basic.def}). -% A \grammarterm{proclaimed-ownership-declaration} nominating a module $M$ -% shall not appear in the purview of $M$. -% -% \alinea -% A \grammarterm{proclaimed-ownership-declaration} asserts that the entities -% introduced by the declaration are exported by the nominated module. -% \enternote -% A \grammarterm{proclaimed-ownership-declaration} may be used to break -% circular dependencies between two modules (in possibly too finely -% designed components.) -% \begin{example} -% \begin{codeblock} -% // TU 1 -% export module Ty; -% extern module Sym: struct Symbol; -% export struct Type { -% Symbol* decl; -% // ... -% }; -% -% // TU 2 -% export module Sym; -% extern module Ty: struct Type; -% export struct Symbol { -% const char* name; -% const Type* type; -% // ... -% }; -% \end{codeblock} -% \end{example} -% \exitnote -% -% \alinea -% The program is ill-formed, no diagnostic required, if the -% nominated module in the -% \grammarterm{proclaimed-ownership-declaration} does not export the entities -% introduced by the declaration. -%\end{std.txt} -%\end{before} - \rSec1[module.global]{Global module fragment} \begin{std.txt}\color{addclr} From b1ae4506add7ecde3c51a09a89374b9784713a2c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 31 Jan 2019 13:13:47 -0800 Subject: [PATCH 51/77] Improve paragraph number macroing and make name consistent with WP. --- src/basic.tex | 81 ++++++++++---------------------- src/classes.tex | 3 +- src/declarations.tex | 14 ++---- src/layout.tex | 22 +-------- src/lexical.tex | 9 ++-- src/modules.tex | 107 +++++++++++++++++++++---------------------- src/overloading.tex | 3 +- src/preprocessor.tex | 28 +++++------ src/templates.tex | 21 ++++----- 9 files changed, 105 insertions(+), 183 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index de91067..6c3f7a8 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -7,8 +7,7 @@ Modify paragraph 6.1/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] A declaration (Clause \ref{dcl.dcl}) may introduce one or more names into a translation unit or redeclare names introduced by previous declarations. If so, the declaration specifies the interpretation and @@ -24,8 +23,7 @@ Change paragraph 6.2/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] \removed{No translation unit shall contain more than one definition of any} \added{A} @@ -55,8 +53,7 @@ Modify opening of paragraph 6.2/6 as follows \begin{std.txt} - \resetalinea[5] - \alinea + \pnum[6] There can be more than one definition of a class type (Clause 10), enumeration type (9.6), inline function with external \added{or module} linkage (9.1.6), @@ -101,8 +98,7 @@ \noindent Modify paragraph 6.3.6/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] The declarative region of a \grammarterm{namespace-definition} is its \grammarterm{namespace-body}. Entities declared in a \grammarterm{namespace-body} @@ -178,8 +174,7 @@ Modify paragraph 6.4/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] The name lookup rules apply uniformly to all names (including \grammarterm{typedef-name}{s} (9.1.3), \grammarterm{namespace-name}{s} (9.7), and @@ -200,8 +195,7 @@ \begin{before} Add new paragraph 6.4/5 as follows: \begin{std.txt}\color{addclr} - \resetalinea[4] - \alinea + \pnum[5] \added{A declaration is \term{reachable} from a program point if it can be found by unqualified name lookup in its scope.} \end{std.txt} @@ -213,8 +207,7 @@ \noindent Modify paragraph 6.4.2/2 as follows: \begin{std.txt} - \resetalinea[1] - \alinea + \pnum[2] For each argument type \tcode{T} in the function call, there is a set of zero or more \term{associated namespaces} and a set of zero or more \term{associated \removed{classes} \added{entities}} @@ -288,8 +281,7 @@ \noindent Modify paragraph 6.4.2/4 as follows: \begin{std.txt} - \resetalinea[3] - \alinea + \pnum[4] When considering an associated namespace, the lookup is the same as the lookup performed when the associated namespace is used as a qualifier (6.4.3.2) except that: @@ -330,8 +322,6 @@ \setcounter{section}{4} \rSec1[basic.link]{Program and linkage}% -\resetalinea[0] - Change the definition of \term{translation-unit} in paragraph 6.5/1 to: @@ -362,11 +352,11 @@ Add new paragraphs after the grammar: \begin{std.txt} -\alinea +\pnum[1] \added{A \grammarterm{private-module-fragment} shall appear only in a primary module interface unit (\ref{module.unit}).} -\alinea +\pnum \added{A token sequence beginning with \tcode{export}\opt{} \tcode{module} or \tcode{export}\opt{} \tcode{import} @@ -412,36 +402,20 @@ \noindent Modify paragraph 6.5/4 as follows: -%\begin{std.txt} -% \resetalinea[3] -% \alinea -% An unnamed namespace or a namespace declared directly or -% indirectly within an unnamed namespace has internal linkage. All other -% namespaces have external linkage. -% \added{A name declared at namespace scope in the purview of a named module -% that does not have internal linkage by the previous rules and that -% is not exported has module -% linkage. The name of any class member where the enclosing class has -% a name with module linkage also has module linkage.} -% A name having namespace scope that has -% not been given internal \added{or module} linkage above has the same linkage as the enclosing -% namespace if it is the name of -%\end{std.txt} -%% New wording suggested by Hubert Tong, on December 17, 2017. + \begin{std.txt} - \resetalinea[3] - \alinea - An unnamed namespace or a namespace declared directly or - indirectly within an unnamed namespace has internal linkage. All other - namespaces have external linkage. - A name having namespace scope that has - not been given internal linkage above \removed{has the same linkage as the enclosing + \pnum[4] + An unnamed namespace or a namespace declared directly or + indirectly within an unnamed namespace has internal linkage. All other + namespaces have external linkage. + A name having namespace scope that has + not been given internal linkage above \removed{has the same linkage as the enclosing namespace if it}\added{and that} is the name of \begin{itemize} \item a variable; or \item a function; or - \item a named class (Clause 10), or an unnamed class defined in a - typedef declaration in which the class has the typedef name for + \item a named class (Clause 10), or an unnamed class defined in a + typedef declaration in which the class has the typedef name for linkage purposes (9.1.3); or \item a named enumeration (9.6), or an unnamed enumeration defined in a typedef declaration in which the enumeration has the typedef name for @@ -468,9 +442,6 @@ the declaration of the name is attached to a named module (\ref{module.unit}) and is not exported (\ref{module.interface}), - %and is not declared in a - %\grammarterm{proclaimed-ownership-declaration} or a - %\grammarterm{linkage-specification}, the name has module linkage;} \item \added{otherwise, the name has external linkage}. \end{itemize} @@ -481,8 +452,7 @@ \noindent Modify 6.5/6 as follows: \begin{std.txt} -\resetalinea[5] -\alinea +\pnum[6] The name of a function declared in block scope and the name of a variable declared by a block scope extern declaration have linkage. \added{If such a declaration is attached to a named module, @@ -500,8 +470,7 @@ \noindent Modify paragraph 6.5/10 and add /11 as follows: \begin{std.txt} - \resetalinea[9] - \alinea + \pnum[10] \addtocounter{footnote}{1} Two names that are the same (Clause 6) and that are declared in different scopes @@ -532,7 +501,7 @@ do not declare entities. \exitnote} - \alinea + \pnum \added{If a declaration would redeclare a reachable declaration attached to a different module, the program is ill-formed.} \color{addclr} @@ -574,16 +543,14 @@ Modify paragraph 6.8.3.1/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] A program shall contain a global function called \tcode{main} \added{attached to the global module}. \end{std.txt} Modify paragraph 6.8.3.1/3 as follows: \begin{std.txt} - \resetalinea[2] - \alinea + \pnum[3] ... A program that declares a variable \tcode{main} at global scope\added{, or that declares a function \tcode{main} at global scope attached to a named module,} diff --git a/src/classes.tex b/src/classes.tex index 30ccc25..d39a473 100644 --- a/src/classes.tex +++ b/src/classes.tex @@ -10,8 +10,7 @@ Modify paragraph 10.2.10/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] [...] The bit-field \removed{attribute}\added{semantic property} is not part of the type of the class member. [...] \end{std.txt} diff --git a/src/declarations.tex b/src/declarations.tex index 6604357..568cdfb 100644 --- a/src/declarations.tex +++ b/src/declarations.tex @@ -35,8 +35,7 @@ \noindent Modify paragraph 9.1.6/6 as follows \begin{std.txt} - \resetalinea[5] - \alinea + \pnum[6] \removed{An} \added{If an} inline function or variable @@ -80,8 +79,7 @@ Add a new paragraph 9.1.6/7 as follows: \begin{std.txt} \color{addclr} - \resetalinea[6] - \alinea + \pnum[7] \added{An exported inline function or variable shall be defined in the translation unit containing its exported declaration, @@ -104,8 +102,7 @@ undeduced placeholder type appears in an expression, the program is ill-formed.'') as follows: \begin{std.txt} -\resetalinea[8] -\alinea +\pnum[9] \added{An exported function with a declared return type that uses a placeholder type shall be defined in the translation unit @@ -124,15 +121,14 @@ \noindent Add a new paragraph after 9.7/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] A namespace is an optionally-named declarative region. The name of a namespace can be used to access entities declared in that namespace; that is, the members of the namespace. Unlike other declarative regions, the definition of a namespace can be split over several parts of one or more translation units. - \alinea + \pnum \added{\enternote A namespace name with external linkage is exported if any of its \term{namespace-definition}{s} is exported, or if it contains any diff --git a/src/layout.tex b/src/layout.tex index 505bb53..d4d6571 100644 --- a/src/layout.tex +++ b/src/layout.tex @@ -56,31 +56,11 @@ }}} \makeatother -\def\pnum{\parabullnum{Paras}{0pt}} +\newcommand{\pnum}[1][]{\ifthenelse{\equal{#1}{}}{}{\setcounter{Paras}{#1}\addtocounter{Paras}{-1}}\parabullnum{Paras}{0pt}} % Leave more room for section numbers in TOC \cftsetindents{section}{1.5em}{3.0em} -% For compatibility only. We no longer need this environment. -\newenvironment{paras}{}{} - - -%% This is used to number paragraphs in ISO C++ standard text, e.g. -%% 3 blah blah ... -%% blah .... ... -\newcounter{alinea}[section] -\renewcommand{\thealinea}{\arabic{alinea}} -\newcommand{\alinea}{% - \ifhmode\par\fi\vskip.5em\noindent - \refstepcounter{alinea}% - \llap{\thealinea\hspace{2ex}}% -} - -\newcommand{\resetalinea}[1][0]{% - \setcounter{alinea}{#1}% -} - - \lstnewenvironment{grammar} {\lstset{basicstyle=\rmfamily,columns=fullflexible,escapechar=@}} {} diff --git a/src/lexical.tex b/src/lexical.tex index 62bef61..e7af876 100644 --- a/src/lexical.tex +++ b/src/lexical.tex @@ -8,8 +8,7 @@ Modify paragraph 5.1/2 as follows \begin{std.txt} - \resetalinea[1] - \alinea + \pnum[2] \enternote Previously translated translation units and instantiation units can be preserved individually or in libraries. The separate translation units of @@ -28,8 +27,7 @@ \noindent Modify bullet 7 of paragraph 5.2/1 as follows: \begin{std.txt} -% \resetalinea[6] -% \alinea +% \pnum[1] \begin{itemize} \item[7.] White-space characters separating tokens are no longer significant. @@ -102,8 +100,7 @@ \noindent Modify note in paragraph \ref{lex.key}/1 as follows: \begin{std.txt} - \resetalinea[0] - \alinea + \pnum[1] ... diff --git a/src/modules.tex b/src/modules.tex index 136f038..4708b67 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -32,8 +32,8 @@ module-name-qualifier identifier \terminal{.} \end{bnf} - \resetalinea[0] -\alinea A \term{module unit} is a translation unit that contains +\pnum +A \term{module unit} is a translation unit that contains a \grammarterm{module-declaration}. A \term{named module} is the collection of module units with the same \grammarterm{module-name}. %Two \grammarterm{module-name}{s} are the same if they are @@ -44,7 +44,7 @@ The optional \grammarterm{attribute-specifier-seq} appertains to the \grammarterm{module-declaration}. -\alinea +\pnum A \term{module interface unit} is a module unit whose \grammarterm{module-declaration} contains the \texttt{export} keyword; any other module unit is a \term{module implementation unit}. @@ -53,7 +53,7 @@ \term{primary module interface unit} of the module; no diagnostic is required. -\alinea +\pnum A \term{module partition} is a module unit whose \grammarterm{module-declaration} contains a \grammarterm{module-partition}. @@ -73,7 +73,7 @@ \exitnote \begin{after}\color{addclr} -\alinea +\pnum \begin{example} \begin{codeblock} // TU 1 @@ -118,13 +118,13 @@ \end{example} \end{after} -\alinea +\pnum A \term{module unit purview} starts at the \grammarterm{module-declaration} and extends to the end of the translation unit. The \term{purview} of a named module \tcode{M} is the set of module unit purviews of \tcode{M}'s module units. -\alinea +\pnum The \term{global module} is the collection of all \grammarterm{global-module-fragment}{s} and all translation units that are not module units. @@ -135,7 +135,7 @@ introduced by any \grammarterm{module-declaration}. \exitnote -\alinea +\pnum A \term{module} is either a named module or the global module. A declaration is \term{attached} to a module as follows: \begin{itemize}\color{addclr} @@ -153,7 +153,7 @@ \end{itemize} % Notion of 'ownership' is unused; removed. -% \alinea +% \pnum % \begin{before}\color{addclr} %For a namespace-scope declaration $D$ of an entity (other than a %namespace), if $D$ is within a \grammarterm{proclaimed-ownership-declaration} @@ -166,7 +166,7 @@ %module to which its first declaration is attached. %\end{after} - \alinea + \pnum \color{addclr} A \grammarterm{module-declaration} that contains neither \tcode{export} @@ -217,8 +217,7 @@ \terminal{export} \terminal{\{} declaration-seq${}_{opt}$ \terminal{\}} \end{bnf} - \resetalinea[0] - \alinea + \pnum An \grammarterm{export-declaration} shall appear only at namespace scope and only in the purview of a module interface unit. An \grammarterm{export-declaration} shall not appear directly @@ -232,7 +231,7 @@ or \grammarterm{declaration-seq} shall not contain an \grammarterm{export-declaration}. - \alinea + \pnum A declaration is \term{exported} if it is \begin{itemize}\color{addclr} \item a namespace-scope declaration declared within an @@ -261,7 +260,7 @@ with EWG; it forbids (for example) \tcode{static_assert} within an \tcode{export} block.} - \alinea + \pnum An exported declaration shall declare at least one name. If the declaration is not within a header unit, it shall not declare a name with internal linkage. @@ -270,7 +269,7 @@ %and the \grammarterm{declaration} shall not be an %\grammarterm{unnamed-namespace-definition}. - \alinea + \pnum \begin{example} \begin{codeblock} // \tcode{"a.h"} @@ -295,7 +294,7 @@ \end{codeblock} \end{example} - \alinea + \pnum If the declaration is a \grammarterm{using-declaration} (9.8 [namespace.udecl]), all entities to which all of the \grammarterm{using-declarator}{s} ultimately refer (if any) @@ -341,7 +340,7 @@ \end{example} \exitnote - \alinea + \pnum A redeclaration of an exported declaration of an entity is implicitly exported. An exported redeclaration of a non-exported declaration @@ -355,7 +354,7 @@ \end{codeblock} \end{example} - \alinea + \pnum A name is \term{exported} by a module if it is introduced or redeclared by an exported declaration in the purview of that module. @@ -407,7 +406,7 @@ \end{codeblock} \end{example} - \alinea + \pnum \enternote Redeclaring a name in an \grammarterm{export-declaration} cannot change the linkage of the name (\ref{basic.link}). @@ -438,12 +437,12 @@ %% non-internal members of the corresponding current instantiation shall %% contain only types with external linkage. -%% \alinea +%% \pnum %% In a \grammarterm{exported-fragment-group}, %% each \grammarterm{fragment} is processed %% as an exported declaration. -\alinea +\pnum \begin{note} Declarations in an exported \grammarterm{namespace-definition} or in an exported \grammarterm{linkage-specification} (10.5) @@ -479,8 +478,7 @@ \end{bnf} \end{after} - \resetalinea[0] - \alinea + \pnum In a module unit, all \grammarterm{module-import-declaration}{s} shall precede all other \grammarterm{top-level-declaration}{s} in the \grammarterm{top-level-declaration-seq} of the @@ -488,7 +486,7 @@ The optional \grammarterm{attribute-specifier-seq} appertains to the \grammarterm{module-import-declaration}. - \alinea + \pnum A \grammarterm{module-import-declaration} \term{imports} a set of translation units determined as described below. \enternote @@ -501,12 +499,12 @@ after the import declaration. \exitnote - \alinea + \pnum A \grammarterm{module-import-declaration} that specifies a \grammarterm{module-name} $M$ imports all module interface units of $M$. - \alinea + \pnum A \grammarterm{module-import-declaration} that specifies a \grammarterm{module-partition} shall only appear after the \grammarterm{module-declaration} in a module unit in @@ -514,7 +512,7 @@ Such a declaration imports the so-named module partition of $M$. - \alinea + \pnum A \grammarterm{module-import-declaration} that specifies a \grammarterm{header-name} $H$ imports a synthesized \term{header unit}, @@ -550,7 +548,7 @@ instantiation whose point of instantiation is outside the header unit, the program is ill-formed. - \alinea + \pnum When a \grammarterm{module-import-declaration} imports a translation unit $T$, it also imports all translation units imported by @@ -565,7 +563,7 @@ These rules may in turn lead to the importation of yet more translation units. - \alinea + \pnum \color{addclr} A module implementation unit shall not be exported. \begin{example} @@ -579,7 +577,7 @@ \end{Program} \end{example} - \alinea + \pnum A module implementation unit of a module \tcode{M} that is not a module partition shall not contain a \grammarterm{module-import-declaration} @@ -591,7 +589,7 @@ \end{codeblock} \end{example} - \alinea + \pnum \begin{before}\color{addclr} A module \tcode{M1} \term{has an interface dependency} on a module \tcode{M2} if the module interface of \tcode{M1} contains a @@ -625,7 +623,7 @@ \end{example} \begin{before}\color{addclr} -\alinea +\pnum A translation unit has an interface dependency on a module \tcode{M} if it is a module implementation unit of \tcode{M}, or if it contains a \grammarterm{module-import-declaration} nominating \tcode{M}, or if it has @@ -641,8 +639,7 @@ \terminal{module} \terminal{;} top-level-declaration-seq\opt \end{bnf} -\resetalinea[0] -\alinea +\pnum A \grammarterm{global-module-fragment} specifies the contents of the \term{global module fragment} for a module unit. The global module fragment can be used to provide declarations @@ -652,7 +649,7 @@ in the global module fragment (\ref{cpp.glob.frag}). \exitnote -\alinea +\pnum Declarations in the global module fragment are \term{discarded} if they are not referenced by the module unit. \begin{note} @@ -699,7 +696,7 @@ %% Changes: entities now include their declaration context in their basis. %% We need to retain those contexts so we can mangle the entity. -\alinea +\pnum The \term{basis} of a declaration $D$ is a set of entites determined as follows: \begin{itemize} \item If $D$ declares a \grammarterm{typedef-name}, the basis is the @@ -797,7 +794,7 @@ denotes. Other non-type template arguments do not designate an entity. -\alinea +\pnum \begin{note} The basis of a declaration does not include entities used in expressions, @@ -819,11 +816,11 @@ \end{example} \end{note} -\alinea +\pnum The \term{interface purview} of a module unit is its purview excluding any \grammarterm{private-module-fragment}. -\alinea +\pnum Certain declarations in a global module fragment are \term{referenced}. Given an \grammarterm{identifier}, @@ -855,8 +852,7 @@ \rSec1[module.context]{Instantiation context} \begin{std.txt}\color{addclr} -\resetalinea[0] -\alinea +\pnum The \term{instantiation context} is a set of locations within the program that determines which names are visible to argument-dependent name lookup (\ref{basic.lookup.argdep}) @@ -865,7 +861,7 @@ The instantiation context depends on how the declaration was formed, or where the template instantiation was referenced. -\alinea +\pnum During the implicit definition of a defaulted special member function (\stdref{special}{10.2.3}), the instantiation context is the union of @@ -873,7 +869,7 @@ the instantiation context of the program construct that resulted in the implicit definition of the special member function. -\alinea +\pnum During the implicit instantiation of a template whose point of instantiation is specified as that of an enclosing specialization (\stdref{temp.point}{12.7.4.1}), @@ -887,23 +883,23 @@ (prior to the \grammarterm{private-module-fragment}, if one is present). -\alinea +\pnum During the implicit instantiation of a template that is implicitly instantiated because it is referenced from within the implicit definition of a defaulted special member function, the instantiation context is the instantiation context of the defaulted special member function. -\alinea +\pnum During the instantiation of any other template specialization, the instantiation context comprises the point of instantiation of the template. -\alinea +\pnum In any other case, the instantiation context at a program point comprises that program point. -\alinea +\pnum \begin{example} \begin{codeblock} // translation unit \#1 @@ -954,8 +950,7 @@ \rSec1[module.reach]{Reachability} \begin{std.txt}\color{addclr} -\resetalinea[0] -\alinea +\pnum A translation unit is \term{reachable} from a program point if it is a module interface unit on which the translation unit containing the program point has an interface dependency, or @@ -969,7 +964,7 @@ to name lookup (\ref{basic.scope.namespace}). \exitnote -\alinea +\pnum It is unspecified whether additional translation units on which the program point has an interface dependency are considered reachable, and under what circumstances.% @@ -979,7 +974,7 @@ Programs intended to be portable should avoid depending on the reachability of any additional translation units. -\alinea +\pnum A declaration is \term{reachable} if, for any program point in the instantiation context (\ref{module.context}), \begin{itemize} @@ -995,7 +990,7 @@ Whether a declaration is exported has no bearing on whether it is reachable. \exitnote -\alinea +\pnum The \term{reachable semantic properties} of an entity within a context are the accumulated properties of all reachable declarations of that entity, and determine the behavior of the entity within @@ -1040,7 +1035,7 @@ \end{example} \exitnote -\alinea +\pnum \enternote The reachable semantic properties for an entity attached to a module $M$ are the same for all contexts outside that module in which the entity @@ -1048,7 +1043,7 @@ imported. \exitnote -\alinea +\pnum \enternote An entity can have reachable declarations and therefore reachable semantic properties even if it is not visible @@ -1068,7 +1063,7 @@ \end{example} \begin{before}\color{addclr} - \alinea + \pnum Within a module interface unit, it is necessary to determine that the declarations being exported collectively present a coherent view of the semantic properties of the entities they reference. This determination @@ -1228,7 +1223,7 @@ \end{codeblock} \end{example} \end{before}\begin{before}\color{addclr} - \alinea + \pnum If $X$ is an attendant entity of two exported declarations designating two distinct entities, %\begin{after}\color{addclr} diff --git a/src/overloading.tex b/src/overloading.tex index 53d6e9d..973b194 100644 --- a/src/overloading.tex +++ b/src/overloading.tex @@ -12,8 +12,7 @@ \noindent Modify paragraph 11.5.8/7 as follows: \begin{std.txt} - \resetalinea[6] - \alinea + \pnum[7] \enternote Literal operators and literal operator templates are usually invoked implicitly through user-defined literals (5.13.8). However, except for diff --git a/src/preprocessor.tex b/src/preprocessor.tex index cc8432b..e271b14 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -6,8 +6,7 @@ Modify paragraph 14/5 as follows: \begin{std.txt} -\resetalinea[4] -\alinea +\pnum[5] The implementation can process and skip sections of source files conditionally, include other source files, @@ -47,8 +46,7 @@ Modify paragraph 14.1/2 as follows: \begin{std.txt} -\resetalinea[1] -\alinea +\pnum[2] A \grammarterm{defined-macro-expression} evaluates to \tcode{1} if the identifier is currently defined as a macro name (that is, if it is predefined or if @@ -64,8 +62,7 @@ Modify paragraph 14.1/3 as follows: \begin{std.txt} -\resetalinea[2] -\alinea +\pnum[3] The \removed{third and fourth forms} \added{second form} of \grammarterm{has-include-expression} @@ -82,9 +79,8 @@ Add a new paragraph after 14.2/6 as follows: \begin{std.txt} -\resetalinea[6] \color{addclr} -\alinea +\pnum[7] If the header identified by the \grammarterm{header-name} denotes an importable header (\ref{module.import}), the preprocessing directive @@ -101,7 +97,6 @@ \setcounter{section}{2} \rSec1[cpp.glob.frag]{Global module fragment}% -\resetalinea[0] \begin{std.txt} \color{addclr} @@ -110,7 +105,7 @@ \terminal{module} \terminal{;} pp-bracketed-tokens \terminal{module} \end{bnf} -\alinea +\pnum If the first two preprocessing tokens at the start of phase 4 of translation are \tcode{module} \tcode{;}, the result of preprocessing shall begin with a \grammarterm{pp-global-module-fragment} for which all @@ -127,7 +122,6 @@ \setcounter{section}{3} \rSec1[cpp.module]{Legacy header units}% -\resetalinea[0] \begin{std.txt} \color{addclr} @@ -181,7 +175,7 @@ \end{bnf} \color{addclr} -\alinea +\pnum A sequence of \grammarterm{preprocessing-token}{s} matching the form of a \grammarterm{pp-import} instructs the preprocessor to import macros from the header unit @@ -196,7 +190,7 @@ immediately after the \tcode{;} terminating the \grammarterm{pp-import}. \color{addclr} -\alinea +\pnum In the second form of \grammarterm{pp-import}, a \grammarterm{header-name} token is formed as if the \grammarterm{header-name-tokens} @@ -209,7 +203,7 @@ \end{note} \color{addclr} -\alinea +\pnum Each \tcode{\#define} directive encountered when preprocessing each translation unit in a program results in a distinct \term{macro definition}. @@ -236,13 +230,13 @@ macro definition, whichever (if any) occurs first. \end{itemize} -\alinea +\pnum A macro directive is \term{active} at a source location if it has a point of definition in that translation unit preceding the location, and does not have a point of undefinition in that translation unit preceding the location. -\alinea +\pnum If a macro would be replaced or redefined, and multiple macro definitions are active for that macro name, the active macro definitions shall all be valid redefinitions of the same macro (\stdref{cpp.replace}{14.3}). @@ -251,7 +245,7 @@ particular macro definition is active. \exitnote -\alinea +\pnum \begin{example} \begin{codeblock} // translation unit a.h diff --git a/src/templates.tex b/src/templates.tex index ee3d51a..6b7bf0b 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -6,8 +6,7 @@ \noindent Modify paragraph 12/4 as follows: \begin{std.txt} - \resetalinea[1] - \alinea + \pnum[4] A \grammarterm{template-declaration} can appear only as a namespace scope or class scope declaration. \added{Its \grammarterm{declaration} shall not be an @@ -43,8 +42,7 @@ Change in 12.7.4/1: \begin{std.txt} -\resetalinea[0] -\alinea +\pnum[1] In resolving dependent names, names from the following sources are considered: \begin{itemize} \item @@ -93,7 +91,7 @@ Add new paragraphs to 12.7.4: \begin{std.txt} \color{addclr} -\alinea +\pnum \enterexample \begin{codeblock} // interface unit of \tcode{Std} @@ -119,7 +117,7 @@ \end{codeblock} \exitexample -\alinea +\pnum \enterexample \begin{codeblock} // header file \tcode{"X.h"} @@ -145,7 +143,7 @@ \end{codeblock} \exitexample -\alinea +\pnum \enterexample \begin{codeblock} // module interface unit of \tcode{A} @@ -203,8 +201,7 @@ \noindent Delete paragraph 12.7.4.1/7: \begin{std.txt} -\resetalinea[6] -\alinea +\pnum[7] \removed{The instantiation context of an expression that depends on the template arguments is the set of declarations with external linkage declared prior to the point of instantiation of the @@ -214,8 +211,7 @@ \noindent Change in paragraph \ref{temp.point}/8: \begin{std.txt} -\resetalinea[7] -\alinea +\pnum[8] in addition to the points of instantiation described above, for any such specialization that has a point of instantiation within the \added{\grammarterm{declaration-seq} of the} @@ -235,8 +231,7 @@ \noindent Modify paragraph 12.7.4.2/1 as follows \begin{std.txt} -\resetalinea[0] -\alinea +\pnum[1] \ldots If the call would be ill-formed or would find a better match had the lookup within the associated namespaces considered all the function From 02ba2b07d6f41f566fe077d7e961f7e852eebbab Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 31 Jan 2019 18:06:52 -0800 Subject: [PATCH 52/77] Address Jens' review comments. --- src/basic.tex | 10 --- src/layout.tex | 2 +- src/modules.tex | 189 +++++++++++++++++++++++----------------------- src/templates.tex | 4 +- 4 files changed, 98 insertions(+), 107 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 6c3f7a8..faa6d08 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -95,7 +95,6 @@ \setcounter{subsection}{5} \rSec2[basic.scope.namespace]{Namespace scope} -\noindent Modify paragraph 6.3.6/1 as follows: \begin{std.txt} \pnum[1] @@ -204,7 +203,6 @@ \setcounter{subsection}{1} \rSec2[basic.lookup.argdep]{Argument-dependent name lookup} -\noindent Modify paragraph 6.4.2/2 as follows: \begin{std.txt} \pnum[2] @@ -278,7 +276,6 @@ template \grammarterm{template-argument}{s}. \end{std.txt} -\noindent Modify paragraph 6.4.2/4 as follows: \begin{std.txt} \pnum[4] @@ -348,7 +345,6 @@ declaration} \end{bnf} -\noindent Add new paragraphs after the grammar: \begin{std.txt} @@ -365,7 +361,6 @@ of a \grammarterm{top-level-declaration}.} \end{std.txt} -\noindent Insert a new bullet between first and second bullet of paragraph 6.5/2: \begin{std.txt}\color{addclr} @@ -378,7 +373,6 @@ \end{itemize} \end{std.txt} -\noindent Modify bullet (3.2) of paragraph 6.5/3 as follows: \begin{std.txt} \begin{itemize} @@ -400,7 +394,6 @@ \end{itemize} \end{std.txt} -\noindent Modify paragraph 6.5/4 as follows: \begin{std.txt} @@ -448,8 +441,6 @@ \end{after} \end{std.txt} - -\noindent Modify 6.5/6 as follows: \begin{std.txt} \pnum[6] @@ -467,7 +458,6 @@ entity receives external linkage. \end{std.txt} -\noindent Modify paragraph 6.5/10 and add /11 as follows: \begin{std.txt} \pnum[10] diff --git a/src/layout.tex b/src/layout.tex index d4d6571..4fe8c97 100644 --- a/src/layout.tex +++ b/src/layout.tex @@ -56,7 +56,7 @@ }}} \makeatother -\newcommand{\pnum}[1][]{\ifthenelse{\equal{#1}{}}{}{\setcounter{Paras}{#1}\addtocounter{Paras}{-1}}\parabullnum{Paras}{0pt}} +\newcommand{\pnum}[1][]{\ifthenelse{\equal{#1}{}}{}{\setcounter{Paras}{#1}\addtocounter{Paras}{-1}}\parabullnum{Paras}{0pt}\ignorespaces} % Leave more room for section numbers in TOC \cftsetindents{section}{1.5em}{3.0em} diff --git a/src/modules.tex b/src/modules.tex index 4708b67..a05a866 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -543,7 +543,8 @@ A declaration of a name with internal linkage is permitted within a header unit despite all declarations being implicitly exported (\ref{module.interface}). - If such a name is odr-used outside the + If such a declaration declares an entity + that is odr-used outside the header unit, or by a template instantiation whose point of instantiation is outside the header unit, the program is ill-formed. @@ -589,23 +590,13 @@ \end{codeblock} \end{example} +\color{addclr} \pnum -\begin{before}\color{addclr} - A module \tcode{M1} \term{has an interface dependency} on a module - \tcode{M2} if the module interface of \tcode{M1} contains a - \grammarterm{module-import-declaration} nominating \tcode{M2}, - or if there exists a module \tcode{M3} such that \tcode{M1} has an - interface dependency on \tcode{M3} and \tcode{M3} has an interface dependency - on \tcode{M2}. A module -\end{before} -\begin{after}\color{addclr} A translation unit \term{has an interface dependency} on a module unit \tcode{U} if it contains a \grammarterm{module-declaration} or \grammarterm{module-import-declaration} that imports \tcode{U} or if it has an interface dependency on a module unit that has an interface dependency on \tcode{U}. - A translation unit -\end{after} - shall not have an interface dependency on itself. + A translation unit shall not have an interface dependency on itself. \begin{example} \begin{Program} // Interface unit of M1 @@ -645,62 +636,20 @@ The global module fragment can be used to provide declarations that are attached to the global module and usable within the module unit. \enternote -Before preprocessing, only preprocessing directives can appear +Prior to phase 4 of translation, +only preprocessing directives can appear in the global module fragment (\ref{cpp.glob.frag}). \exitnote -\pnum -Declarations in the global module fragment are \term{discarded} if they -are not referenced by the module unit. -\begin{note} -A discarded declaration is neither reachable -nor visible to name lookup outside the module unit, -nor in template instantiations whose points of instantiation -(\stdref{temp.point}{12.7.4.1}) are outside the module unit, -even when the instantiation context (\ref{module.context}) -includes the module unit. -\end{note} -\begin{example} -\begin{codeblock} -// \tcode{"foo.h"} -namespace N { - struct X {}; - int f(X); - int g(X); - int h(X); -} - -// module \tcode{M} interface -module; -#include "foo.h" -export module M; -// \tcode{N::f} is reachable via argument-dependent name lookup result -// in context of template definition -template int use_f() { N::X x; f(x); } -// \tcode{N::g} is not reachable because \tcode{g} is a dependent name -// in context of template definition -template int use_g() { N::X x; g((T(), x)); } -// \tcode{N::h} is reachable because \tcode{use_h} has a point of -// instantiation in the module unit \tcode{M} -template int use_h() { N::X x; h((T(), x)); } -int k = use_h(); - -// module \tcode{M} implementation -module M; -int a = use_f(); // ok -int b = use_g(); // error: no viable function for call to \tcode{g} -int c = use_h(); // ok -\end{codeblock} -\end{example} - %% Changes: entities now include their declaration context in their basis. %% We need to retain those contexts so we can mangle the entity. \pnum The \term{basis} of a declaration $D$ is a set of entites determined as follows: \begin{itemize} -\item If $D$ declares a \grammarterm{typedef-name}, the basis is the -type-basis of the aliased type. +\item If $D$ declares a \grammarterm{typedef-name}% +\footnote{An \grammarterm{alias-declaration} declares a \grammarterm{typedef-name}.}, +the basis is the type-basis of the aliased type. \item If $D$ declares a variable or function, the basis is the union of @@ -735,24 +684,22 @@ \end{itemize} \item If $D$ is an \grammarterm{explicit-instantiation} -or an \grammarterm{explicit-specialization}, the basis includes -the primary template and all the entities in the basis of the -\grammarterm{declaration} of $D$. +or an \grammarterm{explicit-specialization}, the basis is the union of +the basis of the \grammarterm{declaration} of $D$ and +the set containing the primary template. -\item If $D$ is a \grammarterm{namespace-definition}, the basis comprises -the innermost enclosing namespace, if any. +\item If $D$ is a \grammarterm{namespace-definition}, the basis is +the set containing the innermost enclosing namespace, if any, +and otherwise is the empty set. -\item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is the -singleton consisting of the namespace denoted by the +\item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is +the set containing the namespace denoted by the \grammarterm{qualified-namespace-specifier}. \item If $D$ is a \grammarterm{using-declaration}, the basis is the union of the bases of all the declarations introduced by the \grammarterm{using-declarator}{s}. -\item If $D$ is an \grammarterm{alias-declaration}, -the basis is the type-basis of its \grammarterm{defining-type-id}. - \item Otherwise, the basis is empty. \end{itemize} @@ -763,7 +710,7 @@ \item If $T$ is a member of an unknown specialization, the type-basis is the type-basis of that specialization. \item If $T$ is a class template specialization, the type-basis -is the set consisting of +is the set containing \begin{itemize} \item the primary template, and \item the entities designated by @@ -772,21 +719,22 @@ \item the elements of the type-bases of the type template arguments (if any). \end{itemize} -\item If $T$ is a class type or an enumeration type, -the type-basis is the singleton $\{ T \}$. +\item If $T$ is a class type that is not a class template specialization +or is an enumeration type, +the type-basis is the set containing $T$. \item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the type-basis is the type-basis of $U$. \item If $T$ is a function type, the type-basis is the union of the type-basis of the return type and the type-bases of the parameter types. \item If $T$ is a pointer to data member of a class $X$, the type-basis is -the union of the type-basis of $X$ and the type-basis of member type. +the union of the type-basis of $X$ and the type-basis of the member type. \item If $T$ is a pointer to member function type of a class $X$, the type-basis is the union of the type-basis of $X$ and the type-basis of the function type. \item Otherwise, the type-basis is the empty set. \end{itemize} -A non-type template argument for a template parameter of pointer type +A non-type template argument for a template parameter of pointer type that is not value-dependent designates the entity (if any) that the pointer points to. A non-type template argument for a template parameter of reference type @@ -820,26 +768,35 @@ The \term{interface purview} of a module unit is its purview excluding any \grammarterm{private-module-fragment}. +% Note: don't need to handle unqualified-ids here, because the +% "named by an expression" rule in bullet 2 covers functions. \pnum Certain declarations in a global module fragment are \term{referenced}. Given an -\grammarterm{identifier}, -\grammarterm{unqualified-id}, +\grammarterm{identifier}%, +%\grammarterm{unqualified-id}, or expression in an interface purview or in a template instantiation whose point of instantiation is in that interface purview: \begin{itemize} \item -For an \grammarterm{identifier} or \grammarterm{unqualified-id}, +For an \grammarterm{identifier},% or \grammarterm{unqualified-id}, if name lookup for it finds a unique result, -the declaration found is referenced. +the declarations found are referenced. \item For an expression, -the declarations of any function named by it are referenced. +the declarations of any function +named by the expression (\stdref{basic.def.odr}{6.2}) +are referenced. \item -For an expression that governs name lookup for a dependent name, +For an expression of the form +\begin{ncsimplebnf} +postfix-expression \terminal{(} \opt{expression-list} \terminal{)} +\end{ncsimplebnf} +whose \grammarterm{postfix-expression} denotes a dependent name, +or for an operator expression whose operator denotes a dependent name, consider an expression synthesized from it -by replacing each type-dependent argument +by replacing each type-dependent argument or operand with a value of a placeholder type with no associated namespaces or entities. All declarations found by name lookup @@ -849,6 +806,50 @@ The declarations of entities in the basis of a referenced declaration are referenced, recursively. \end{std.txt} +\pnum +A declaration in the global module fragment is \term{discarded} if it +is not referenced by the module unit. +\begin{note} +A discarded declaration is neither reachable +nor visible to name lookup outside the module unit, +nor in template instantiations whose points of instantiation +(\stdref{temp.point}{12.7.4.1}) are outside the module unit, +even when the instantiation context (\ref{module.context}) +includes the module unit. +\end{note} +\begin{example} +\begin{codeblock} +// \tcode{"foo.h"} +namespace N { + struct X {}; + int f(X); + int g(X); + int h(X); +} + +// module \tcode{M} interface +module; +#include "foo.h" +export module M; +// \tcode{N::f} is reachable via argument-dependent name lookup result +// in context of template definition +template int use_f() { N::X x; f(x); } +// \tcode{N::g} is not reachable because \tcode{g} is a dependent name +// in context of template definition +template int use_g() { N::X x; g((T(), x)); } +// \tcode{N::h} is reachable because \tcode{use_h} has a point of +// instantiation in the module unit \tcode{M} +template int use_h() { N::X x; h((T(), x)); } +int k = use_h(); + +// module \tcode{M} implementation +module M; +int a = use_f(); // ok +int b = use_g(); // error: no viable function for call to \tcode{g} +int c = use_h(); // ok +\end{codeblock} +\end{example} + \rSec1[module.context]{Instantiation context} \begin{std.txt}\color{addclr} @@ -858,8 +859,6 @@ (\ref{basic.lookup.argdep}) and which declarations are reachable (\ref{module.reach}) in the context of a particular declaration or template instantiation. -The instantiation context depends on how the declaration was formed, -or where the template instantiation was referenced. \pnum During the implicit definition of a defaulted special member function @@ -880,8 +879,7 @@ the point at the end of the \grammarterm{top-level-declaration-seq} of the primary module interface unit of $M$ -(prior to the \grammarterm{private-module-fragment}, -if one is present). +(prior to the \grammarterm{private-module-fragment}, if any). \pnum During the implicit instantiation of a template @@ -1002,7 +1000,7 @@ visibility of class or enumeration member names to ordinary lookup, etc. Since default arguments are evaluated in the context of the call expression, -the reachable semantic properties of the corresponding parameter types apply in +the reachable semantic properties of the corresponding parameter types apply in that context. \begin{example} \begin{codeblock} @@ -1026,22 +1024,25 @@ export import :A; import :B; B b2; +export void f(B b = B()); // translation unit \#5 module X; import M; B b3; // error: no reachable definition of \tcode{struct B} +void g() { f(); } // error: no reachable definition of \tcode{struct B} \end{codeblock} \end{example} \exitnote -\pnum -\enternote -The reachable semantic properties for an entity attached to a module $M$ -are the same for all contexts outside that module in which the entity -can be referenced, irrespective of whether $M$ is directly or indirectly -imported. -\exitnote +% This is not necessarily true due to the "semantic boundaries" rule. +%\pnum +%\enternote +%The reachable semantic properties for an entity attached to a module $M$ +%are the same for all contexts outside that module in which the entity +%can be referenced, irrespective of whether $M$ is directly or indirectly +%imported. +%\exitnote \pnum \enternote diff --git a/src/templates.tex b/src/templates.tex index 6b7bf0b..d61c23b 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -214,10 +214,10 @@ \pnum[8] in addition to the points of instantiation described above, for any such specialization that has a point of instantiation within the -\added{\grammarterm{declaration-seq} of the} +\added{\grammarterm{top-level-declaration-seq} of the} translation unit, \added{prior to the \grammarterm{private-module-fragment} (if any), -the point after the \grammarterm{declaration-seq} +the point after the \grammarterm{top-level-declaration-seq} of the \grammarterm{translation-unit} is also considered a point of instantiation, and for any such specialization that has a point of instantiation From 57ef3c3054e7b1bfbafadc66aeb29b33effcc6dc Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 5 Feb 2019 17:09:35 -0800 Subject: [PATCH 53/77] Add example as suggested by Peter Sommerlad. --- src/bg.tex | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/bg.tex b/src/bg.tex index 04580ff..c7a3a48 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -127,6 +127,32 @@ in contexts within the same module that import the module unit. All declarations in transitively-imported module units are reachable, whether or not they are exported. +\begin{example} +\begin{codeblock} +// a.cpp +export module A; // interface of module \tcode{A} +int foo() { return 1; } +export int bar(); +\end{codeblock} + +\begin{codeblock} +// a-impl.cpp +module A; // implementation of module \tcode{A}, implicitly + // considered to import the interface of \tcode{A} +// OK; \tcode{foo()} is visible here (in the same module) even though +// it was not exported from \tcode{A} +int bar() { return foo() + 1; } +\end{codeblock} + +\begin{codeblock} +// unrelated.cpp +import A; +int main() { + bar(); // OK, \tcode{bar} was exported by \tcode{A} and is visible here + foo(); // error: \tcode{foo} is not visible here +} +\end{codeblock} +\end{example} \pnum If a declaration within a namespace is exported, From a820ec03b88c05659090c56bfe647ca895537fa8 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 5 Feb 2019 17:21:31 -0800 Subject: [PATCH 54/77] Fix FIXME: incidental reachability of a prior definition does not render a program ill-formed when a redefinition is encountered. --- src/basic.tex | 40 +++++++++++++++++++++++++++++----------- src/modules.tex | 12 ++++++++---- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index faa6d08..fc850f2 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -17,10 +17,6 @@ \rSec1[basic.def.odr]{One-definition rule} -\textbf{\color{red}FIXME: Incidental reachability (allowed -by the semantic boundaries rule) should not render a program -ill-formed.} - Change paragraph 6.2/1 as follows: \begin{std.txt} \pnum[1] @@ -28,11 +24,12 @@ of any} \added{A} variable, function, class type, enumeration type, or template - \added{shall not be defined where a prior definition is reachable - (\ref{module.reach})}. + \added{shall not be defined where a prior definition is necessarily reachable + (\ref{module.reach}); + no diagnostic is required if the prior declaration is in another translation unit}. \end{std.txt} -\textbf{\color{red}FIXME: Should we allow multiple definitions +\textbf{\color{red}FIXME: Should we disallow multiple definitions of entities with module linkage now that we have module partitions?} \begin{example} @@ -50,10 +47,31 @@ \end{codeblock} \end{example} -Modify opening of paragraph 6.2/6 as follows +Modify the end of paragraph 6.2/10 as follows + +\begin{std.txt} +\pnum[10] +[...] +\removed{An} +\added{A definition of an} +inline function or variable shall be \removed{defined} \added{reachable} +in every translation unit in which it is odr-used outside of a discarded statement. +\end{std.txt} + +Modify paragraph 6.2/11 as follows + +\begin{std.txt} +\pnum[11] +\removed{Exactly one} +\added{A} definition of a class is required \added{to be reachable} +\removed{in a translation unit if} \added{in every context in which} +the class is used in a way that requires the class type to be complete. +\end{std.txt} + +Modify opening of paragraph 6.2/12 as follows \begin{std.txt} - \pnum[6] + \pnum[12] There can be more than one definition of a class type (Clause 10), enumeration type (9.6), inline function with external \added{or module} linkage (9.1.6), @@ -66,7 +84,7 @@ specified (12.8, 12.6.5) in a program provided that \removed{each definition appears in a different translation unit} - \added{no prior definition is reachable (\ref{module.reach}) + \added{no prior definition is necessarily reachable (\ref{module.reach}) at the point where a definition appears}, and provided the definitions satisfy the following requirements. @@ -298,7 +316,7 @@ \color{addclr} \item[---] \added{Any function or function template in the interface of - a named module \tcode{M} (\ref{module}) that has + a named module \tcode{M} (\ref{module.interface}) that has the same innermost enclosing non-inline namespace as some associated entity attached to \tcode{M} is visible within its namespace diff --git a/src/modules.tex b/src/modules.tex index a05a866..e8a6ee8 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -780,7 +780,7 @@ in a template instantiation whose point of instantiation is in that interface purview: \begin{itemize} \item -For an \grammarterm{identifier},% or \grammarterm{unqualified-id}, +For an \grammarterm{identifier}, % or \grammarterm{unqualified-id}, if name lookup for it finds a unique result, the declarations found are referenced. \item @@ -790,8 +790,9 @@ are referenced. \item For an expression of the form + \begin{ncsimplebnf} -postfix-expression \terminal{(} \opt{expression-list} \terminal{)} +postfix-expression \terminal{(} expression-list\opt{} \terminal{)} \end{ncsimplebnf} whose \grammarterm{postfix-expression} denotes a dependent name, or for an operator expression whose operator denotes a dependent name, @@ -804,7 +805,6 @@ in the synthesized expression are referenced. \end{itemize} The declarations of entities in the basis of a referenced declaration are referenced, recursively. -\end{std.txt} \pnum A declaration in the global module fragment is \term{discarded} if it @@ -849,6 +849,7 @@ int c = use_h(); // ok \end{codeblock} \end{example} +\end{std.txt} \rSec1[module.context]{Instantiation context} @@ -949,7 +950,7 @@ \begin{std.txt}\color{addclr} \pnum -A translation unit is \term{reachable} from a program point if +A translation unit is \term{necessarily reachable} from a program point if it is a module interface unit on which the translation unit containing the program point has an interface dependency, or it is a translation unit that the translation unit containing the @@ -963,6 +964,7 @@ \exitnote \pnum +All translation units that are necessarily reachable are \term{reachable}. It is unspecified whether additional translation units on which the program point has an interface dependency are considered reachable, and under what circumstances.% @@ -987,6 +989,8 @@ \enternote Whether a declaration is exported has no bearing on whether it is reachable. \exitnote +A declaration is \term{necessarily reachable} if it is reachable +considering only translation units that are necessarily reachable. \pnum The \term{reachable semantic properties} of an entity within a context From 2717f637ea993cdb42e85793676610e5b30fbe9d Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 5 Feb 2019 17:41:48 -0800 Subject: [PATCH 55/77] Add an example of the modules-specific ADL rules. --- src/basic.tex | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index fc850f2..79a3f8a 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -294,7 +294,7 @@ template \grammarterm{template-argument}{s}. \end{std.txt} -Modify paragraph 6.4.2/4 as follows: +Modify paragraph 6.4.2/4 and add /5 as follows: \begin{std.txt} \pnum[4] When considering an associated namespace, the lookup is the same as @@ -331,7 +331,51 @@ internal linkage declarations attached to the global module.} \end{itemize} -\textbf{\color{red}FIXME: Add an example.} +\pnum +\color{addclr} +\added{\enterexample} +\begin{codeblock} +// TU 1 +export module M; +namespace R { + export struct X {}; + export void f(X); +} +namespace S { + export void f(X, X); +} +\end{codeblock} + +\begin{codeblock} +// TU 2 +export module N; +import M; +export R::X make(); +namespace R { static int g(X); } +template void apply(T t, U u) { + f(t, u); + g(t); +} +\end{codeblock} + +\begin{codeblock} +// TU 3 +module Q; +import N; +namespace S { + struct Z { template operator T(); }; +} +void test() { + auto x = make(); // OK, \tcode{decltype(x)} is \tcode{R::X} in module \tcode{M} + R::f(x); // ill-formed: \tcode{R} and \tcode{R::f} are not visible here + f(x); // OK, calls \tcode{R::f} from interface of \tcode{M} + f(x, Z()); // ill-formed: \tcode{S::f} in module \tcode{M} not considered + // even though \tcode{S} is an associated namespace + apply(x, Z()); // OK, \tcode{S::f} is visible in instantiation context, and + // \tcode{R::g} is visible even though it has internal linkage +} +\end{codeblock} +\added{\exitexample} \end{std.txt} \setcounter{section}{4} From 35124befee91074450f10509b11305e441cad54a Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 8 Feb 2019 16:49:47 -0800 Subject: [PATCH 56/77] Disallow multiple definitions of a module-linkage entity. This rule was present in the Modules TS and was dropped at some point during work on the merged proposal. --- src/basic.tex | 57 +++++++++++++-------------------------------------- 1 file changed, 14 insertions(+), 43 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 79a3f8a..84620a0 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -29,24 +29,6 @@ no diagnostic is required if the prior declaration is in another translation unit}. \end{std.txt} -\textbf{\color{red}FIXME: Should we disallow multiple definitions -of entities with module linkage now that we have module partitions?} - -\begin{example} -\begin{codeblock} -// TU 1 -module A; -class X {}; -void f(X x) { /*...*/ } - -// TU 2 -module A; -class X {}; -void f(X x); -void g() { X x; f(x); } -\end{codeblock} -\end{example} - Modify the end of paragraph 6.2/10 as follows \begin{std.txt} @@ -72,39 +54,28 @@ \begin{std.txt} \pnum[12] - There can be more than one definition of a class type (Clause 10), - enumeration type (9.6), inline function with external \added{or module} - linkage (9.1.6), - inline variable with external \added{or module} linkage (9.1.6), - class template (Clause 12), + There can be more than one definition of a class type (Clause 10), + enumeration type (9.6), inline function with external + linkage (9.1.6), + inline variable with external linkage (9.1.6), + class template (Clause 12), non-static function template (12.6.6), - static data member of a class - template (12.6.1.3), member function of a class template (12.6.1.1), or - template specialization for which some template parameters are not + static data member of a class + template (12.6.1.3), member function of a class template (12.6.1.1), or + template specialization for which some template parameters are not specified (12.8, 12.6.5) in a program provided that - \removed{each definition appears + \removed{each definition appears in a different translation unit} \added{no prior definition is necessarily reachable (\ref{module.reach}) - at the point where a definition appears}, - and provided the definitions satisfy the - following requirements. -\begin{before} - \added{For an entity with an exported declaration, there shall be only one - definition of that entity; a diagnostic is required only if the abstract - semantics graph of the module contains a definition of the entity.} - \added{\enternote - If the definition is not in the interface unit, then at most one module unit can - have and make use of the definition. - \exitnote} -\end{before} -\begin{after} + at the point where a definition appears}, + and provided the definitions satisfy the + following requirements. \added{There shall not be more than one definition - of an entity with external linkage + of an entity that is attached to a named module (\ref{module.unit}); no diagnostic is required unless a prior definition is reachable at a point where a later definition appears.} -\end{after} - Given such an entity named \tcode{D} defined in more than one + Given such an entity named \tcode{D} defined in more than one translation unit, then \end{std.txt} From fccd18aea4200be8c274e133e8f8900e2ac9b8ec Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 8 Feb 2019 16:52:57 -0800 Subject: [PATCH 57/77] Fix italics: we are defining 'attached' for entities, not for declaratios, here. --- src/basic.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 84620a0..2a1aa57 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -550,8 +550,8 @@ \end{codeblock} \end{example} \added{As a consequence of these rules, - all declarations of an entity are \term{attached} to the same module; - the entity is said to be attached to that module.} + all declarations of an entity are attached to the same module; + the entity is said to be \term{attached} to that module.} \end{std.txt} From 423b5b3efd2ed35322e532597e5680d9b6143483 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 12 Feb 2019 17:04:36 -0800 Subject: [PATCH 58/77] Add missing 'return's in example. Fixes #2. --- src/modules.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index e8a6ee8..1d51d0d 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -833,13 +833,13 @@ export module M; // \tcode{N::f} is reachable via argument-dependent name lookup result // in context of template definition -template int use_f() { N::X x; f(x); } +template int use_f() { N::X x; return f(x); } // \tcode{N::g} is not reachable because \tcode{g} is a dependent name // in context of template definition -template int use_g() { N::X x; g((T(), x)); } +template int use_g() { N::X x; return g((T(), x)); } // \tcode{N::h} is reachable because \tcode{use_h} has a point of // instantiation in the module unit \tcode{M} -template int use_h() { N::X x; h((T(), x)); } +template int use_h() { N::X x; return h((T(), x)); } int k = use_h(); // module \tcode{M} implementation From ccf4c2ee1ba771f762d7978b4431e93f20a23f6e Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 12 Feb 2019 17:05:48 -0800 Subject: [PATCH 59/77] Fix typo "an module". Fixes #3. --- src/modules.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules.tex b/src/modules.tex index 1d51d0d..11c32f6 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -110,7 +110,7 @@ forming part of the interface of module \tcode{A}, \item a module partition \tcode{A:Internals}, which does not contribute to the external interface of module \tcode{A}, and -\item an module implementation unit providing +\item a module implementation unit providing a definition of \tcode{bar} and \tcode{baz}, which cannot be imported because it does not have a partition name. From b2e97c4c174fb1eb3482baa4b0d386f55a78cbb7 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sun, 17 Feb 2019 20:29:08 -1000 Subject: [PATCH 60/77] Excise remaining occurrences of 'legacy header unit' and 'header module' terminology in the commentary in favor of the wording's term 'header unit'. --- src/bg.tex | 44 ++++++++++++++++++++++---------------------- src/preprocessor.tex | 4 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/bg.tex b/src/bg.tex index c7a3a48..0ea82cd 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -68,7 +68,7 @@ \pnum A \term{module unit} is a translation unit that forms part of a module. Such a translation unit begins with% -\footnote{A global module fragment (\ref{merged.legacy.frag}) may optionally +\footnote{A global module fragment (\ref{merged.global.frag}) may optionally precede the preamble.} a preamble, comprising a module declaration @@ -247,7 +247,7 @@ interoperation between modular code and traditional non-modular code. -\rSec2[merged.legacy.frag]{Global module fragment} +\rSec2[merged.global.frag]{Global module fragment} \pnum The merged proposal permits Modules TS-style global module fragments, @@ -296,10 +296,10 @@ \end{codeblock} \end{example} -\rSec2[merged.legacy.import]{Legacy header units} +\rSec2[merged.header.import]{Header units} \pnum -The merged proposal also permits Atom-style legacy header units, +The merged proposal also permits Atom-style header units, which are introduced by a special \tcode{import} syntax that names a header file instead of a module: @@ -317,11 +317,11 @@ so that they can be made available to importers. \pnum -Declarations from code in a legacy module header +Declarations from code in a header unit are not owned by any module. In particular, the same entities can be redeclared -by another legacy header unit or by non-modular code. -Legacy module headers can be re-exported +by another header unit or by non-modular code. +Header units can be re-exported using the regular \tcode{export import} syntax: \begin{codeblock} @@ -329,14 +329,14 @@ export import "some-header.h"; \end{codeblock} -However, when a legacy header unit is re-exported, +However, when a header unit is re-exported, macros are not exported. -Only the legacy header import syntax can import macros. +Only the header import syntax can import macros. -\rSec2[merged.legacy.reachability]{Reachability of legacy declarations} +\rSec2[merged.nonmodular.reachability]{Reachability of nonmodular declarations} \pnum -A declaration in a global module fragment or legacy header unit +A declaration in a global module fragment or header unit is reachable if it is visible. It is unspecified whether such a declaration is also reachable in contexts where it is not visible but is transitively @@ -348,35 +348,35 @@ this rule is enforced up to the implementation.) \pnum -Discarded declarations (\ref{merged.legacy.frag}) from the global module +Discarded declarations (\ref{merged.global.frag}) from the global module fragment are never visible nor reachable from outside that module unit. \rSec2[merged.nonmodular.use]{Module use from non-modular code} \pnum -Modules and legacy header units can be imported into non-modular code. +Modules and header units can be imported into non-modular code. Such imports can appear anywhere, and are not restricted to a preamble. This permits ``bottom-up'' modularization, whereby a library switches to providing only a modular interface and defining its header interface in terms of the modular interface. -Non-modular code includes translation units other than module units, -headers imported as legacy header units, and the global module fragment +Non-modular code includes translation units other than module units +(including headers imported as header units), and the global module fragment of a module unit. \pnum When a \tcode{\#include} appears within non-modular code, -if the named header file is known to correspond to a legacy header unit, +if the named header file is known to correspond to a header unit, the implementation treats the \tcode{\#include} as an import -of the corresponding legacy header unit. +of the corresponding header unit. The mechanism for discovering this correspondence is left implementation-defined; there are multiple viable strategies here -(such as explicitly building legacy header modules and +(such as explicitly building header units and providing them as input to downstream compilations, or -introducing accompanying files describing the legacy header structure) +introducing accompanying files describing the header unit structure) and we wish to encourage exploration of this space. An implementation is also permitted to not provide any mapping mechanism, -and process each legacy header unit independently. +and process each header unit independently. \rSec0[vs]{Comparison to prior proposals} @@ -532,7 +532,7 @@ \end{example} \pnum -As described above (\ref{merged.legacy.reachability}), +As described above (\ref{merged.nonmodular.reachability}), implementations are permitted to treat additional declarations as reachable even if they would not be reachable on the path of instantiation, @@ -560,7 +560,7 @@ \pnum In R0 of this proposal, the preprocessor was burdened with finding -the end of the preamble, and making macros from legacy header units +the end of the preamble, and making macros from header units visible at that point. That was problematic both for implementers (as it is a challenging rule to implement) and for users (as code would silently do something diff --git a/src/preprocessor.tex b/src/preprocessor.tex index e271b14..b2c0576 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -118,10 +118,10 @@ translation shall not be \tcode{module} \tcode{;}. \end{std.txt} -Add a new subclause 14.4 titled ``\textbf{Legacy header units}'' as follows: +Add a new subclause 14.4 titled ``\textbf{Header units}'' as follows: \setcounter{section}{3} -\rSec1[cpp.module]{Legacy header units}% +\rSec1[cpp.module]{Header units}% \begin{std.txt} \color{addclr} From 96160ed5d33528efc8b6887f4fa619be52bf2621 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Sun, 17 Feb 2019 20:40:07 -1000 Subject: [PATCH 61/77] Add "differences from r2" section. --- src/bg.tex | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/bg.tex b/src/bg.tex index 0ea82cd..e4e1916 100644 --- a/src/bg.tex +++ b/src/bg.tex @@ -380,6 +380,44 @@ \rSec0[vs]{Comparison to prior proposals} +\rSec1[vs.r2]{Changes since R2} + +\pnum +This section lists changes to the design of the merged modules proposal +since P1103R2. + +\begin{itemize} +\item +Addressed wording feedback from CWG and other parties. +\item +Fixed bug where an incidentally-reachable definition could render other +definitions of the same entity ill-formed: +\begin{codeblock} +// a.h +#ifndef A_H +#define A_H +class X {}; +#endif + +// b.cc +#include "a.h" +export module B; +X x; + +// c.cc +export module C; +import B; // not exported + +// d.cc +import C; +#include "a.h" // OK even if definition of X is incidentally visible + // due to semantic boundaries rule +\end{codeblock} +\item +Fixed unintended divergence from Modules TS that permitted module linkage +entities to have definitions in multiple module units +\end{itemize} + \rSec1[vs.r1]{Changes since R1} \pnum From b1001567db0efe33526b9149bdfa3ace136e69f9 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 18 Feb 2019 15:36:47 -1000 Subject: [PATCH 62/77] Fix bullet numbering. --- src/basic.tex | 30 +++++++++++++++--------------- src/templates.tex | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 2a1aa57..53e8afb 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -207,10 +207,10 @@ and \removed{classes} \added{entities} are determined in the following way: \begin{itemize} - \item[---] If \tcode{T} is a fundamental type, its associated sets + \item If \tcode{T} is a fundamental type, its associated sets of namespaces and \removed{classes} \added{entities} are both empty. - \item[---] If \tcode{T} is a class type (including unions), its + \item If \tcode{T} is a class type (including unions), its associated \removed{classes} \added{entities} are the class itself; the class of which it is a member, if any; and its direct and indirect base classes. Its associated namespaces are the innermost @@ -226,23 +226,23 @@ template arguments are members. \enternote Non-type template arguments do not contribute to the set of associated namespaces. \exitnote - \item[---] If \tcode{T} is an enumeration type, its associated + \item If \tcode{T} is an enumeration type, its associated namespace is the innermost enclosing namespace of its declaration\added{, and its associated entities are \tcode{T} and, if}\removed{. If} it is a class member, \removed{its associated class is} the member's class\removed{; else it has no associated class}. - \item[---] If \tcode{T} is a pointer to \tcode{U} or an array + \item If \tcode{T} is a pointer to \tcode{U} or an array of \tcode{U}, its associated namespaces and \removed{classes} \added{entities} are those associated with \tcode{U}. - \item[---] If \tcode{T} is a function type, its associated + \item If \tcode{T} is a function type, its associated namespaces and \removed{classes} \added{entities} are those associated with the function parameter types and those associated with the return type. - \item[---] If \tcode{T} is a pointer to a data member of + \item If \tcode{T} is a pointer to a data member of class \tcode{X}, its associated namespaces and \removed{classes} \added{entities} are those associated with the member type together with those associated with \tcode{X}. @@ -272,7 +272,7 @@ the lookup performed when the associated namespace is used as a qualifier (6.4.3.2) except that: \begin{itemize} - \item[---] Any \grammarterm{using-directive}{s} in the associated + \item Any \grammarterm{using-directive}{s} in the associated namespace are ignored. \item Any namespace-scope friend declaration functions or friend @@ -285,7 +285,7 @@ and function templates are ignored. \color{addclr} - \item[---] + \item \added{Any function or function template in the interface of a named module \tcode{M} (\ref{module.interface}) that has the same innermost enclosing non-inline namespace as @@ -294,7 +294,7 @@ to a lookup that does not occur within a module unit of \tcode{M}, even if it is not visible during an ordinary lookup.} - \item[---] + \item \added{All declarations that are visible at any point in the instantiation context (\ref{module.context}) of the lookup are visible even if they are not visible during an ordinary lookup, @@ -398,7 +398,7 @@ \begin{std.txt}\color{addclr} \begin{itemize} - \item[---] \added{When a name has \term{module linkage}, the entity it denotes + \item \added{When a name has \term{module linkage}, the entity it denotes can be referred to by names from other scopes of the same module unit (\ref{module.unit}) or from scopes of @@ -409,7 +409,7 @@ Modify bullet (3.2) of paragraph 6.5/3 as follows: \begin{std.txt} \begin{itemize} - \item[---] + \item %a non-inline \added{non-exported} variable of non-volatile const-qualified type %that is neither explicitly declared \tcode{extern} nor %previously declared to have external \added{or module} linkage; or @@ -417,9 +417,9 @@ unless} \begin{itemize} \color{addclr} - \item[---] \added{it is explicitly declared \tcode{extern}, or} - \item[---] \added{it is inline or exported, or} - \item[---] \added{it was previously declared and the prior declaration did + \item \added{it is explicitly declared \tcode{extern}, or} + \item \added{it is inline or exported, or} + \item \added{it was previously declared and the prior declaration did not have internal linkage; or} \end{itemize} \removed{that is neither explicitly declared \tcode{extern} nor @@ -499,7 +499,7 @@ names that are the same (Clause 6) and that are declared in different scopes shall denote the same variable, function, type, template or namespace if \begin{itemize} - \item[---] both names have external \added{or module} linkage + \item both names have external \added{or module} linkage \added{and are declared in declarations attached to the same module,} or else both names have internal linkage and are declared in diff --git a/src/templates.tex b/src/templates.tex index d61c23b..160d731 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -29,7 +29,7 @@ %% \noindent %% Modify second bullet of paragraph 14.6.4/1 %% \begin{std.txt} -%% \item[---] Declarations from namespace \added{partitions} associated +%% \item Declarations from namespace \added{partitions} associated %% with the types of the function arguments both from the %% instantiation context (14.6.4.1) and from the definition context. %% \end{std.txt} From 3b5cc6554cda5d6fed490cb95db8509ce71e8794 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Mon, 18 Feb 2019 16:29:01 -1000 Subject: [PATCH 63/77] Address some feedback from Davis. --- src/basic.tex | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 53e8afb..782cd06 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -119,7 +119,7 @@ is extended to include the portion of the corresponding namespace scope in $N$ following the first \grammarterm{module-import-declaration} or \grammarterm{module-declaration} -in $N$ that directly or indirectly imports $M$ if +in $N$ that imports $M$ (directly or indirectly) if } \color{addclr} \begin{itemize} \item \added{$X$ does not have internal linkage, and} @@ -277,7 +277,9 @@ \item Any namespace-scope friend declaration functions or friend function templates (10.7.3) declared in \removed{associated} - classes \added{in the set of associated entities} are visible within + classes \added{with reachable definitions + in the set of associated entities} + are visible within their respective namespaces even if they are not visible during an ordinary lookup (9.7.1.2). @@ -295,8 +297,10 @@ even if it is not visible during an ordinary lookup.} \item - \added{All declarations that are visible at any point in the instantiation - context (\ref{module.context}) of the lookup are visible + \added{All namespace-scope function or function template declarations + that are visible to qualified name lookup (\ref{basic.lookup.qual}) + at any point in the instantiation context (\ref{module.context}) of the lookup + are visible in their respective namespaces even if they are not visible during an ordinary lookup, excluding discarded declarations (\ref{module.global}) and internal linkage declarations attached to the global module.} @@ -349,6 +353,30 @@ \added{\exitexample} \end{std.txt} +\setcounter{subsection}{2} +\rSec2[basic.lookup.qual]{Qualified name lookup} + +\setcounter{subsubsection}{1} +\rSec3[namespace.qual]{Namespace members} + +Change in paragraph 2: + +\begin{std.txt} +\pnum[2] +For a namespace \tcode{X} +and name \tcode{m}, +the namespace-qualified lookup set \tcode{S(X,m)} is defined as follows: +Let \tcode{S'(X,m)} be the set of all declarations of \tcode{m} in \tcode{X} +and the inline namespace set of \tcode{X} (9.7.1) +\added{whose potential scope (\stdref{basic.scope.namespace}{6.3.6}) +would include the namespace in which \tcode{m} is declared +at the location of the \grammarterm{nested-name-specifier}{}}. +If \tcode{S'(X,m)} is not empty, \tcode{S(X, m)} is \tcode{S'(X, m)}; +otherwise, \tcode{S(X, m)} is the union of \tcode{S(Ni, m)} +for all namespaces \tcode{Ni} nominated by \grammarterm{using-directives} +in \tcode{X} and its inline namespace set. +\end{std.txt} + \setcounter{section}{4} \rSec1[basic.link]{Program and linkage}% From 5f5cad95cf2c2aea30e9165628e3d34a22c44818 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 20 Feb 2019 15:28:44 -1000 Subject: [PATCH 64/77] Checkpoint in CWG review. --- src/basic.tex | 2 +- src/modules.tex | 174 +++++++++++++++++++++++++++++------------------- 2 files changed, 106 insertions(+), 70 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 782cd06..4819e80 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -297,7 +297,7 @@ even if it is not visible during an ordinary lookup.} \item - \added{All namespace-scope function or function template declarations + \added{Any namespace-scope function or function template declarations that are visible to qualified name lookup (\ref{basic.lookup.qual}) at any point in the instantiation context (\ref{module.context}) of the lookup are visible in their respective namespaces diff --git a/src/modules.tex b/src/modules.tex index 11c32f6..e294d83 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -119,8 +119,10 @@ \end{after} \pnum -A \term{module unit purview} starts at the \grammarterm{module-declaration} -and extends to the end of the translation unit. +A \term{module unit purview} is +the sequence of \grammarterm{token}{s} +starting at the \grammarterm{module-declaration} +and extending to the end of the translation unit. The \term{purview} of a named module \tcode{M} is the set of module unit purviews of \tcode{M}'s module units. @@ -644,6 +646,69 @@ %% Changes: entities now include their declaration context in their basis. %% We need to retain those contexts so we can mangle the entity. +\pnum +A non-type template argument for a template parameter of pointer type +that is not value-dependent designates the entity (if any) that the +pointer points to. +A non-type template argument for a template parameter of reference type +that is not value-dependent designates the entity that the argument +denotes. +Other non-type template arguments do not designate an entity. + +\pnum +The \term{template-specialization-basis} of a template specialization is +the set comprising +\begin{itemize} +\item the primary template, and +\item the entities designated by +non-type template arguments and +template template arguments (if any), and +\item the elements of the type-bases +of the type template arguments (if any). +\end{itemize} + +\pnum +The \term{type-basis} of a type $T$ is +\begin{itemize} +\item If $T$ is a cv-qualified type, the type-basis is the type-basis of +the unqualified type. +\item If $T$ is a member of an unknown specialization, the type-basis +is the type-basis of that specialization. +\item If $T$ is a class template specialization, the type-basis +is the template-specialization-basis of $T$. +%is the set comprising +%\begin{itemize} +%\item the primary template, and +%\item the entities designated by +%non-type template arguments and +%template template arguments (if any), and +%\item the elements of the type-bases +%of the type template arguments (if any). +%\end{itemize} +\item If $T$ is a class type that is not a class template specialization +or is an enumeration type, +the type-basis is the set comprising $T$. +\item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the +type-basis is the type-basis of $U$. +\item If $T$ is a function type, the type-basis is the union of the +type-basis of the return type and the type-bases of the parameter types. +\item If $T$ is a pointer to data member of a class $X$, the type-basis is +the union of the type-basis of $X$ and the type-basis of the member type. +\item If $T$ is a pointer to member function type of a class $X$, the +type-basis is the union of the type-basis of $X$ and the type-basis of +the function type. +\item Otherwise, the type-basis is the empty set. +\begin{note} +This applies to template type parameters and to fundamental types. +\end{note} +\end{itemize} + +\pnum +The \term{enclosing context} of a declaration $D$ is the set comprising +the functions and namespaces enclosing $D$, +the namespace, class, or class template of which $D$ is a member (if any), +and the closure types of any \grammarterm{lambda-expression}{s} enclosing $D$. + \pnum The \term{basis} of a declaration $D$ is a set of entites determined as follows: \begin{itemize} @@ -654,14 +719,12 @@ \item If $D$ declares a variable or function, the basis is the union of the type-basis of the type of that variable or function -and the set containing the -innermost enclosing namespace, class, or function. +and the enclosing context of $D$. \item If $D$ defines a class type, the basis is the union of the type-bases of its direct base classes (if any), and the bases of its \grammarterm{member-declaration}{s}, -and the set containing the -innermost enclosing namespace, class, or function. +and the enclosing context of $D$. \item If $D$ is a \grammarterm{template-declaration}, the basis is the union @@ -676,24 +739,24 @@ \item the type-bases of the default type template arguments, \item -the set containing the -innermost enclosing namespace, class, or function, and +the enclosing context of $D$, and \item if $D$ declares a partial specialization, -the set containing the primary template. +the set comprising the primary template. \end{itemize} \item If $D$ is an \grammarterm{explicit-instantiation} or an \grammarterm{explicit-specialization}, the basis is the union of the basis of the \grammarterm{declaration} of $D$ and -the set containing the primary template. +%the set comprising the primary template. +the template-specialization-basis of the specialization. \item If $D$ is a \grammarterm{namespace-definition}, the basis is -the set containing the innermost enclosing namespace, if any, +the set comprising the innermost enclosing namespace, if any, and otherwise is the empty set. \item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is -the set containing the namespace denoted by the +the set comprising the namespace denoted by the \grammarterm{qualified-namespace-specifier}. \item If $D$ is a \grammarterm{using-declaration}, the basis is the union @@ -703,45 +766,6 @@ \item Otherwise, the basis is empty. \end{itemize} -The \term{type-basis} of a type $T$ is -\begin{itemize} -\item If $T$ is a cv-qualified type, the type-basis is the type-basis of -the unqualified type. -\item If $T$ is a member of an unknown specialization, the type-basis -is the type-basis of that specialization. -\item If $T$ is a class template specialization, the type-basis -is the set containing -\begin{itemize} -\item the primary template, and -\item the entities designated by -non-type template arguments and -template template arguments (if any), and -\item the elements of the type-bases -of the type template arguments (if any). -\end{itemize} -\item If $T$ is a class type that is not a class template specialization -or is an enumeration type, -the type-basis is the set containing $T$. -\item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the -type-basis is the type-basis of $U$. -\item If $T$ is a function type, the type-basis is the union of the -type-basis of the return type and the type-bases of the parameter types. -\item If $T$ is a pointer to data member of a class $X$, the type-basis is -the union of the type-basis of $X$ and the type-basis of the member type. -\item If $T$ is a pointer to member function type of a class $X$, the -type-basis is the union of the type-basis of $X$ and the type-basis of -the function type. -\item Otherwise, the type-basis is the empty set. -\end{itemize} - -A non-type template argument for a template parameter of pointer type -that is not value-dependent designates the entity (if any) that the -pointer points to. -A non-type template argument for a template parameter of reference type -that is not value-dependent designates the entity that the argument -denotes. -Other non-type template arguments do not designate an entity. - \pnum \begin{note} The basis of a declaration @@ -760,6 +784,9 @@ template S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2}, \mathtt{::} \}$ + +template +void h() noexcept(g(N) == N); // \tcode{h}'s basis: $\{ \mathtt{::} \}$ \end{codeblock} \end{example} \end{note} @@ -771,21 +798,26 @@ % Note: don't need to handle unqualified-ids here, because the % "named by an expression" rule in bullet 2 covers functions. \pnum -Certain declarations in a global module fragment are \term{referenced}. -Given an -\grammarterm{identifier}%, -%\grammarterm{unqualified-id}, -or expression +Certain declarations in a global module fragment are \term{referenced} +as described below. +Except for declarations of functions and function templates, +all declarations +named by +\grammarterm{id-expression}{s}, +\grammarterm{namespace-name}{s}, +\grammarterm{type-name}{s}, +\grammarterm{template-name}{s}, and +\grammarterm{concept-name}{s} +appearing +in an interface purview or +in a template instantiation whose point of instantiation is in that interface purview +are referenced. +Given an expression in an interface purview or in a template instantiation whose point of instantiation is in that interface purview: \begin{itemize} \item -For an \grammarterm{identifier}, % or \grammarterm{unqualified-id}, -if name lookup for it finds a unique result, -the declarations found are referenced. -\item -For an expression, -the declarations of any function +The declarations of any function named by the expression (\stdref{basic.def.odr}{6.2}) are referenced. \item @@ -803,11 +835,15 @@ All declarations found by name lookup for the corresponding name in the synthesized expression are referenced. +\item +For an expression that takes the address of an overloaded function (\stdref{over.over}{11.4}) +for which the overload cannot be resolved because the target type is dependent, +all members of the set of overload functions are referenced. \end{itemize} The declarations of entities in the basis of a referenced declaration are referenced, recursively. \pnum -A declaration in the global module fragment is \term{discarded} if it +A declaration \tcode{D} in the global module fragment is \term{discarded} if \tcode{D} is not referenced by the module unit. \begin{note} A discarded declaration is neither reachable @@ -831,16 +867,16 @@ module; #include "foo.h" export module M; -// \tcode{N::f} is reachable via argument-dependent name lookup result -// in context of template definition template int use_f() { N::X x; return f(x); } -// \tcode{N::g} is not reachable because \tcode{g} is a dependent name -// in context of template definition + // \tcode{N::f} is reachable via argument-dependent name lookup result + // in context of template definition template int use_g() { N::X x; return g((T(), x)); } -// \tcode{N::h} is reachable because \tcode{use_h} has a point of -// instantiation in the module unit \tcode{M} + // \tcode{N::g} is not reachable because \tcode{g} is a dependent name + // in context of template definition template int use_h() { N::X x; return h((T(), x)); } int k = use_h(); + // \tcode{N::h} is reachable because \tcode{use_h} has a point of + // instantiation in the module unit \tcode{M} // module \tcode{M} implementation module M; From 74b25ce43db357c3dbb80f8aa051b25e64ba5f70 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 20 Feb 2019 15:30:20 -1000 Subject: [PATCH 65/77] referenced -> gmf-referenced (Global Module Fragment) --- src/modules.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index e294d83..8ae9b58 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -798,7 +798,7 @@ % Note: don't need to handle unqualified-ids here, because the % "named by an expression" rule in bullet 2 covers functions. \pnum -Certain declarations in a global module fragment are \term{referenced} +Certain declarations in a global module fragment are \term{gmf-referenced} as described below. Except for declarations of functions and function templates, all declarations @@ -811,7 +811,7 @@ appearing in an interface purview or in a template instantiation whose point of instantiation is in that interface purview -are referenced. +are gmf-referenced. Given an expression in an interface purview or in a template instantiation whose point of instantiation is in that interface purview: @@ -819,7 +819,7 @@ \item The declarations of any function named by the expression (\stdref{basic.def.odr}{6.2}) -are referenced. +are gmf-referenced. \item For an expression of the form @@ -834,17 +834,17 @@ with no associated namespaces or entities. All declarations found by name lookup for the corresponding name -in the synthesized expression are referenced. +in the synthesized expression are gmf-referenced. \item For an expression that takes the address of an overloaded function (\stdref{over.over}{11.4}) for which the overload cannot be resolved because the target type is dependent, -all members of the set of overload functions are referenced. +all members of the set of overload functions are gmf-referenced. \end{itemize} -The declarations of entities in the basis of a referenced declaration are referenced, recursively. +The declarations of entities in the basis of a gmf-referenced declaration are gmf-referenced, recursively. \pnum A declaration \tcode{D} in the global module fragment is \term{discarded} if \tcode{D} -is not referenced by the module unit. +is not gmf-referenced by the module unit. \begin{note} A discarded declaration is neither reachable nor visible to name lookup outside the module unit, From 066f47b2160c6b9be2e9f92c68c00345517cb6cd Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 20 Feb 2019 16:26:59 -1000 Subject: [PATCH 66/77] More CWG review. --- src/modules.tex | 73 +++++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index 8ae9b58..a370306 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -795,10 +795,9 @@ The \term{interface purview} of a module unit is its purview excluding any \grammarterm{private-module-fragment}. -% Note: don't need to handle unqualified-ids here, because the -% "named by an expression" rule in bullet 2 covers functions. \pnum -Certain declarations in a global module fragment are \term{gmf-referenced} +Certain declarations in the global module fragment of a module unit $U$ +are \term{gmf-referenced} as described below. Except for declarations of functions and function templates, all declarations @@ -809,11 +808,11 @@ \grammarterm{template-name}{s}, and \grammarterm{concept-name}{s} appearing -in an interface purview or +in the interface purview of $U$ or in a template instantiation whose point of instantiation is in that interface purview are gmf-referenced. Given an expression -in an interface purview or +in the interface purview of $U$ or in a template instantiation whose point of instantiation is in that interface purview: \begin{itemize} \item @@ -843,8 +842,8 @@ The declarations of entities in the basis of a gmf-referenced declaration are gmf-referenced, recursively. \pnum -A declaration \tcode{D} in the global module fragment is \term{discarded} if \tcode{D} -is not gmf-referenced by the module unit. +A declaration \tcode{D} in a global module fragment is \term{discarded} if \tcode{D} +is not gmf-referenced. \begin{note} A discarded declaration is neither reachable nor visible to name lookup outside the module unit, @@ -853,12 +852,15 @@ even when the instantiation context (\ref{module.context}) includes the module unit. \end{note} + +\pnum \begin{example} \begin{codeblock} // \tcode{"foo.h"} namespace N { struct X {}; - int f(X); + int d(); + int f(X, int = d()); int g(X); int h(X); } @@ -867,22 +869,30 @@ module; #include "foo.h" export module M; -template int use_f() { N::X x; return f(x); } - // \tcode{N::f} is reachable via argument-dependent name lookup result - // in context of template definition -template int use_g() { N::X x; return g((T(), x)); } - // \tcode{N::g} is not reachable because \tcode{g} is a dependent name - // in context of template definition -template int use_h() { N::X x; return h((T(), x)); } +template int use_f() { + N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} + return f(x); // gmf-references \tcode{N::f}, and indirectly \tcode{N::X}, \tcode{N}, and \tcode{::} + // does not gmf-reference \tcode{N::d} +} +template int use_g() { + N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} + return g((T(), x)); // does not gmf-reference any declarations +} +template int use_h() { + N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} + return h((T(), x)); // does not gmf-reference any declarations in template definition, + // gmf-references \tcode{N::h}, and indirectly \tcode{N::X}, \tcode{N}, and \tcode{::} in instantiation of \tcode{use_h} +} int k = use_h(); - // \tcode{N::h} is reachable because \tcode{use_h} has a point of + // \tcode{N::h} is gmf-referenced because \tcode{use_h} has a point of // instantiation in the module unit \tcode{M} // module \tcode{M} implementation module M; -int a = use_f(); // ok -int b = use_g(); // error: no viable function for call to \tcode{g} -int c = use_h(); // ok +int a = use_f(); // OK +int b = use_g(); // error: no viable function for call to \tcode{g} because + // \tcode{g} is not gmf-referenced so is discarded +int c = use_h(); // OK \end{codeblock} \end{example} \end{std.txt} @@ -891,7 +901,7 @@ \begin{std.txt}\color{addclr} \pnum -The \term{instantiation context} is a set of locations within the program +The \term{instantiation context} is a set of points within the program that determines which names are visible to argument-dependent name lookup (\ref{basic.lookup.argdep}) and which declarations are reachable (\ref{module.reach}) @@ -931,8 +941,9 @@ of the template. \pnum -In any other case, the instantiation context at a program point comprises -that program point. +In any other case, the instantiation context +at a point within the program +comprises that point. \pnum \begin{example} @@ -986,12 +997,11 @@ \begin{std.txt}\color{addclr} \pnum -A translation unit is \term{necessarily reachable} from a program point if -it is a module interface unit on which the translation unit containing the -program point has an interface dependency, or -it is a translation unit that the translation unit containing the -program point imports, -prior to that program point (\ref{module.import}). +A translation unit $U$ is \term{necessarily reachable} from a point $P$ if +$U$ is a module interface unit on which the translation unit containing $P$ +has an interface dependency, or +the translation unit containing $P$ imports $U$, +in either case prior to $P$ (\ref{module.import}). \enternote While module interface units are reachable even when they are only transitively imported via a non-exported import declaration, @@ -1007,8 +1017,11 @@ \footnote{Implementations are not required to prevent the semantic effects of additional translation units involved in the compilation from being observed.} -Programs intended to be portable should avoid -depending on the reachability of any additional translation units. +\begin{note} +It is advisable to avoid +depending on the reachability of any additional translation units +in programs intending to be portable. +\end{note} \pnum A declaration is \term{reachable} if, for any program point in the From dafc3e65117a3c47c0846ff7525a0b1d829921d7 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 20 Feb 2019 17:07:22 -1000 Subject: [PATCH 67/77] More CWG review. --- src/modules.tex | 16 +++---- src/templates.tex | 110 +++++++++++++++++++--------------------------- 2 files changed, 54 insertions(+), 72 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index a370306..d93be25 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -1012,7 +1012,7 @@ \pnum All translation units that are necessarily reachable are \term{reachable}. It is unspecified whether additional translation units on which the -program point has an interface dependency are considered reachable, +point within the program has an interface dependency are considered reachable, and under what circumstances.% \footnote{Implementations are not required to prevent the semantic effects of additional translation units involved in the compilation from being @@ -1024,22 +1024,22 @@ \end{note} \pnum -A declaration is \term{reachable} if, for any program point in the +A declaration $D$ is \term{reachable} or \term{necessarily reachable} if, +for any point $P$ in the instantiation context (\ref{module.context}), \begin{itemize} -\item it appears prior to that program point in the same translation unit, or -\item it is not discarded (\ref{module.global}), -appears in a translation unit that is reachable from that program point, +\item $D$ appears prior to $P$ in the same translation unit, or +\item $D$ is not discarded (\ref{module.global}), +appears in a translation unit that is +reachable or necessarily reachable from $P$, respectively, and either does not appear within a \grammarterm{private-module-fragment} or appears in a \grammarterm{private-module-fragment} -of the module containing the program point. +of the module containing $P$. \end{itemize} \enternote Whether a declaration is exported has no bearing on whether it is reachable. \exitnote -A declaration is \term{necessarily reachable} if it is reachable -considering only translation units that are necessarily reachable. \pnum The \term{reachable semantic properties} of an entity within a context diff --git a/src/templates.tex b/src/templates.tex index 160d731..023be13 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -38,21 +38,56 @@ \rSec1[temp.res]{Name resolution} \setcounter{subsection}{3} \rSec2[temp.dep.res]{Dependent name resolution} +\rSec3[temp.point]{Point of instantiation} + +\noindent +Delete paragraph 12.7.4.1/7: +\begin{std.txt} +\pnum[7] +\removed{The instantiation context of an expression that depends on +the template arguments is the set of declarations with external +linkage declared prior to the point of instantiation of the +template specialization in the same translation unit.} +\end{std.txt} + +\noindent +Change in paragraph \ref{temp.point}/8: +\begin{std.txt} +\pnum[8] +in addition to the points of instantiation described above, for any such +specialization that has a point of instantiation within the +\added{\grammarterm{top-level-declaration-seq} of the} +translation unit, +\added{prior to the \grammarterm{private-module-fragment} (if any), +the point after the \grammarterm{top-level-declaration-seq} +of the \grammarterm{translation-unit} +is also considered a point of instantiation, +and for any such specialization that has a point of instantiation +within the \grammarterm{private-module-fragment},} +the end of the translation unit is also +considered a point of instantiation. +\end{std.txt} -Change in 12.7.4/1: +\rSec3[temp.dep.candidate]{Candidate functions} +\noindent +Modify paragraph 12.7.4.2/1 as follows \begin{std.txt} \pnum[1] -In resolving dependent names, names from the following sources are considered: -\begin{itemize} -\item -Declarations that are visible at the point of definition of the template. -\item -Declarations from namespaces associated with the types of the function -arguments both from the instantiation context -\removed{(12.7.4.1)} \added{(\ref{module.context})} -and from the definition context. -\end{itemize} +\ldots +If the call would be ill-formed or would find a better match had the +lookup within the associated namespaces considered all the function +declarations with external \added{or module} +linkage introduced in those namespaces in all +translation units, not just considering those declarations found in the +template definition and template instantiation contexts, then the program +has undefined behavior. +\end{std.txt} + +Append new paragraphs as follows: + +\begin{std.txt} +\pnum[2] \enterexample\color{addclr} \begin{codeblock} // header file \tcode{"X.h"} @@ -85,11 +120,7 @@ } \end{codeblock} \exitexample -\end{std.txt} -\noindent -Add new paragraphs to 12.7.4: -\begin{std.txt} \color{addclr} \pnum \enterexample @@ -195,52 +226,3 @@ \end{codeblock} \exitexample \end{std.txt} - -\rSec3[temp.point]{Point of instantiation} - -\noindent -Delete paragraph 12.7.4.1/7: -\begin{std.txt} -\pnum[7] -\removed{The instantiation context of an expression that depends on -the template arguments is the set of declarations with external -linkage declared prior to the point of instantiation of the -template specialization in the same translation unit.} -\end{std.txt} - -\noindent -Change in paragraph \ref{temp.point}/8: -\begin{std.txt} -\pnum[8] -in addition to the points of instantiation described above, for any such -specialization that has a point of instantiation within the -\added{\grammarterm{top-level-declaration-seq} of the} -translation unit, -\added{prior to the \grammarterm{private-module-fragment} (if any), -the point after the \grammarterm{top-level-declaration-seq} -of the \grammarterm{translation-unit} -is also considered a point of instantiation, -and for any such specialization that has a point of instantiation -within the \grammarterm{private-module-fragment},} -the end of the translation unit is also -considered a point of instantiation. -\end{std.txt} - -\rSec3[temp.dep.candidate]{Candidate functions} - -\noindent -Modify paragraph 12.7.4.2/1 as follows -\begin{std.txt} -\pnum[1] -\ldots -If the call would be ill-formed or would find a better match had the -lookup within the associated namespaces considered all the function -declarations with external \added{or module} -linkage introduced in those namespaces in all -translation units, not just considering those declarations found in the -template definition and template instantiation contexts, then the program -has undefined behavior. -\end{std.txt} - - - From 2ebcd5a00b612476c58d21e2442e5759a65eadd5 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 20 Feb 2019 17:13:11 -1000 Subject: [PATCH 68/77] Example fixes. --- src/modules.tex | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index d93be25..28b5eda 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -871,8 +871,7 @@ export module M; template int use_f() { N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} - return f(x); // gmf-references \tcode{N::f}, and indirectly \tcode{N::X}, \tcode{N}, and \tcode{::} - // does not gmf-reference \tcode{N::d} + return f(x); // gmf-references \tcode{N::f} and \tcode{N::d}, and indirectly \tcode{N::X}, \tcode{N}, and \tcode{::} } template int use_g() { N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} @@ -975,19 +974,17 @@ import M1; import M2; void test() { - // OK: the instantiation context of \tcode{foo} comprises - // the point at the end of translation unit \#1, - // the point at the end of translation unit \#2, and - // the point of the call to \tcode{f(0)} below, so - // the definition of \tcode{X} is reachable (\ref{module.reach}) - f(0); - - // the instantiation context of \tcode{foo} comprises - // the point at the end of translation unit \#1, - // the point at the end of translation unit \#3, and - // the point of the call to \tcode{g(0)} below, so - // the definition of \tcode{X} is not necessarily reachable - g(0); + f(0); // OK: the instantiation context of \tcode{foo} comprises + // the point at the end of translation unit \#1, + // the point at the end of translation unit \#2, and + // the point of the call to \tcode{f(0)} below, so + // the definition of \tcode{X} is reachable (\ref{module.reach}) + + g(0); // the instantiation context of \tcode{foo} comprises + // the point at the end of translation unit \#1, + // the point at the end of translation unit \#3, and + // the point of the call to \tcode{g(0)} below, so + // the definition of \tcode{X} is not necessarily reachable } \end{codeblock} \end{example} From 9ebb886b09a024b2a1bf0fed7d4e3aca094c8983 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 20 Feb 2019 19:55:11 -1000 Subject: [PATCH 69/77] Delete some commented-out wording. --- src/modules.tex | 195 ------------------------------------------------ 1 file changed, 195 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index 28b5eda..385741d 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -1112,199 +1112,4 @@ X x; // ill-formed: \tcode{X} not visible to unqualified lookup \end{codeblock} \end{example} - -\begin{before}\color{addclr} - \pnum - Within a module interface unit, it is necessary to determine that the - declarations being exported collectively present a coherent view of - the semantic properties of the entities they reference. This determination - is based on the semantic properties of attendant entities. - \enternote - The reachable semantics properties of an entity, the declarations of which - are made available via a \grammarterm{module-import-declaration}, are - determined by its owning module and are unaffected by the importing module. -\end{before}\begin{before}\color{addclr} - \begin{example} - \begin{codeblock} - // module interface of M1 - export module M1; - export struct S { }; - - // module interface of M2 - import M1; - export module M2; - export S f(); // \#1 - export S* g(); // \#2 - - // elsewhere - import M2; - auto x = f(); // OK: completeness of S obtained at \#1 - auto y = *g(); // OK: completeness of S obtained at \#2 - \end{codeblock} - \end{example} - \exitnote -\end{before}\begin{before}\color{addclr} - For each declaration $D$ exported from the module interface unit of a module $M$, - there is a set of zero or more - \term{attendant entities} defined as follows: - \begin{itemize} - \item If $D$ is a type alias declaration, then the attendant entities - of $D$ are those determined by the aliased type at the point of the - declaration $D$. - - \item If $D$ is a \grammarterm{using-declaration}, the set of attendant entities - is the union of the sets of attendant entities of the declarations introduced by - $D$ at the point of the declaration. - - \item If $D$ is a template declaration, the set of attendant entities is - the union of the set of attendant entities - of the declaration being parameterized, the set of attendant entities - determined by the default type template arguments (if any), - and the set consisting of - the entities (if any) designated by the default template template argument, - the default non-type template arguments (if any). - - \item if $D$ has a type $T$, the set of attendant entities is the set of - attendant entities determined by $T$ at the point of declaration. - - \item Otherwise, the set of attendant entities is empty. - \end{itemize} -\end{before}\begin{before}\color{addclr} - The \term{set of attendant entities determined by} a type $T$ is defined as follows - (exactly one of these cases matches): - \begin{itemize} - \item\color{addclr} If $T$ is a fundamental type, then - the set of attendant entities is empty. - - % \item\color{addclr} If $T$ is a dependent type denoted by a \grammarterm{typename-specifier} - % where the \grammarterm{nested-name-specifier} itself denotes a dependent type, - % then the set of attendant entities is the set of attendant entities determined by - % that type. - \item\color{addclr} If $T$ is a member of an unknown specialization, the set of - attendant entities is the set of attendant entities determined by that - unknown specialization. - - \item\color{addclr} If $T$ is a class type owned by $M$, the set of attendant entities includes - $T$ itself, the union of the sets of the attendant entities determined - by its direct base classes owned by $M$, the sets of the - attendant entities of its data members, static data member templates, - member functions, member function templates, - the function parameters of its constructors and constructor templates. - Furthermore, if $T$ is a - class template specialization, the set of attendant entities also - includes: the class template if it is owned by $M$, - the union of the sets of attendant entities determined by the type - template-arguments, the sets of the attendant entities of the templates - used as template template-arguments, the sets of the attendant entities - determined by the types of the non-type template-arguments. - - \item\color{addclr} If $T$ is an enumeration type owned by $M$, - the set of attendant entities is the singleton $\{T\}$. - - \item\color{addclr} If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, - the set of attendant entities is the set of attendant entities determined by $U$. - - \item\color{addclr} If $T$ is a function type, the set of attendant entities is the - union of the set of attendant entities determined by the function - parameter types and the return type. - - \item\color{addclr} if $T$ is a pointer to data member of class $X$, the set of attendant - entities is the union of the set of attendant entities of the member type - and the set of attendant entities determined by $X$. - - \item\color{addclr} If $T$ is a pointer to member function type of a class $X$, the - set of attendant entities is the union of the set of attendant entities - determined by $X$ and the set of attendant entities determined by - the function type. - - \item\color{addclr} Otherwise, the set of attendant entities is empty. - \end{itemize} -\end{before}\begin{before}\color{addclr} - If a class template $X$ is an attendant entity, then its reachable semantic - properties include all the declarations of the primary class template, - its partial specializations, and its explicit specializations in the - containing module interface unit. - If a complete class type $X$ is an attendant entity, then its reachable - semantic properties include the declarations of its nested types but - not the definitions of the types denoted by those members - unless those definitions are exported. - Furthermore, if $X$ is an attendant entity of an - exported declaration $D$, then its reachable semantic properties are - restricted to those defined by the exported declarations of $X$ - (if $X$ is introduced by an exported declaration), or by - the semantic properties of $X$ available at the point of the declaration $D$. - \enternote - If $X$ is a complete class type that is an attendant entity, its nested types - (including nested enumerations and associated enumerators) - and member class templates - are not considered attendant entities unless they are determined attendant - entities by one of the rules above. Attendant entities allow type checking - of direct member selection of an object even if that object's type isn't exported. - Declarations, such as \grammarterm{asm-declaration} or - \grammarterm{alias-declaration} or - \grammarterm{static\_assert-declaration}, - that do not declare entities do not contribute to the set of attendant entities. - \exitnote - \begin{example} - \begin{codeblock} - export module M; - export struct Foo; // Foo exported as incomplete type - struct Foo { }; - export using ::Foo; // OK: exports complete type Foo - - struct C { }; - struct S { - struct B { }; - using C = ::C; - int i : 8; - double d { }; - }; - - export S f(); // S attendant entity of f(). - - // translation unit 2 - import M; - int main() { - int x = sizeof(decltype(f())::B); // error: incomplete B - int y = sizeof(decltype(f())::C); // error: incomplete C - decltype(f()) s { }; - s.d = 3.14; // OK - return &s.i != nullptr; // error: cannot take address of bitfield - } - \end{codeblock} - \end{example} -\end{before}\begin{before}\color{addclr} - \pnum - If $X$ is an attendant entity of two exported declarations - designating two distinct entities, - %\begin{after}\color{addclr} - and $X$ is declared in the purview of the global module, - %\end{after} - its reachable semantic properties shall - be the same at the points where the declarations occur. - %\begin{before}\color{addclr} - \begin{example} - \begin{codeblock} - export module M; - struct S; - export S f(); // \#1 - struct S { }; - export S g(); // error: class type S has different properties from \#1 - \end{codeblock} - \end{example} - %\end{before} - -% \begin{after}\color{addclr} -% \begin{example} -% \begin{codeblock} -% module; -% struct S; -% export module M; -% export S f(); // \#1 -% extern "C++" struct S { }; -% export S g(); // error: class type S has different properties from \#1 -% \end{codeblock} -% \end{example} -% \end{after} -\end{before} \end{std.txt} From 2b1ae6dd21a212a1c75a893fc7962ba701adcdb0 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 21 Feb 2019 11:10:32 -1000 Subject: [PATCH 70/77] Reword global module fragment section. --- src/modules.tex | 293 +++++++++++++++++------------------------------- 1 file changed, 104 insertions(+), 189 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index 385741d..e251ccf 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -643,215 +643,129 @@ in the global module fragment (\ref{cpp.glob.frag}). \exitnote -%% Changes: entities now include their declaration context in their basis. -%% We need to retain those contexts so we can mangle the entity. - -\pnum -A non-type template argument for a template parameter of pointer type -that is not value-dependent designates the entity (if any) that the -pointer points to. -A non-type template argument for a template parameter of reference type -that is not value-dependent designates the entity that the argument -denotes. -Other non-type template arguments do not designate an entity. - \pnum -The \term{template-specialization-basis} of a template specialization is -the set comprising +A declaration $D$ is \term{decl-reachable} from a declaration $S$ if: \begin{itemize} -\item the primary template, and -\item the entities designated by -non-type template arguments and -template template arguments (if any), and -\item the elements of the type-bases -of the type template arguments (if any). -\end{itemize} +\item +$D$ is not a function or function template and +$S$ contains an +\grammarterm{id-expression}, +\grammarterm{namespace-name}, +\grammarterm{type-name}, +\grammarterm{template-name}, or +\grammarterm{concept-name} +naming $D$, or -\pnum -The \term{type-basis} of a type $T$ is -\begin{itemize} -\item If $T$ is a cv-qualified type, the type-basis is the type-basis of -the unqualified type. -\item If $T$ is a member of an unknown specialization, the type-basis -is the type-basis of that specialization. -\item If $T$ is a class template specialization, the type-basis -is the template-specialization-basis of $T$. -%is the set comprising -%\begin{itemize} -%\item the primary template, and -%\item the entities designated by -%non-type template arguments and -%template template arguments (if any), and -%\item the elements of the type-bases -%of the type template arguments (if any). -%\end{itemize} -\item If $T$ is a class type that is not a class template specialization -or is an enumeration type, -the type-basis is the set comprising $T$. -\item If $T$ is a reference to $U$, or a pointer to $U$, or an array of $U$, the -type-basis is the type-basis of $U$. -\item If $T$ is a function type, the type-basis is the union of the -type-basis of the return type and the type-bases of the parameter types. -\item If $T$ is a pointer to data member of a class $X$, the type-basis is -the union of the type-basis of $X$ and the type-basis of the member type. -\item If $T$ is a pointer to member function type of a class $X$, the -type-basis is the union of the type-basis of $X$ and the type-basis of -the function type. -\item Otherwise, the type-basis is the empty set. -\begin{note} -This applies to template type parameters and to fundamental types. -\end{note} -\end{itemize} +\item +$D$ is a function or function template and +is named by an expression (\stdref{basic.def.odr}{6.2}) +appearing in $S$, or -\pnum -The \term{enclosing context} of a declaration $D$ is the set comprising -the functions and namespaces enclosing $D$, -the namespace, class, or class template of which $D$ is a member (if any), -and the closure types of any \grammarterm{lambda-expression}{s} enclosing $D$. +\item +$S$ contains an expression \tcode{E} of the form -\pnum -The \term{basis} of a declaration $D$ is a set of entites determined as follows: -\begin{itemize} -\item If $D$ declares a \grammarterm{typedef-name}% -\footnote{An \grammarterm{alias-declaration} declares a \grammarterm{typedef-name}.}, -the basis is the type-basis of the aliased type. - -\item If $D$ declares a variable or function, -the basis is the union of -the type-basis of the type of that variable or function -and the enclosing context of $D$. - -\item If $D$ defines a class type, the basis is the union of the -type-bases of its direct base classes (if any), and the bases of -its \grammarterm{member-declaration}{s}, -and the enclosing context of $D$. - -\item If $D$ is a \grammarterm{template-declaration}, -the basis is the union -of +\begin{ncsimplebnf} +postfix-expression \terminal{(} expression-list\opt{} \terminal{)} +\end{ncsimplebnf} +whose \grammarterm{postfix-expression} denotes a dependent name, +or for an operator expression whose operator denotes a dependent name, +and $D$ is found by name lookup for the corresponding name +in an expression synthesized from \tcode{E} +by replacing each type-dependent argument or operand +with a value of a placeholder type +with no associated namespaces or entities, or + +\item +$S$ contains an expression that +takes the address of an overloaded function (\stdref{over.over}{11.4}) +whose set of overloads contains $D$ and +for which the target type is dependent, or + +\item +there exists a declaration $M$, not of a namespace, for which +$M$ is decl-reachable from $S$ and either \begin{itemize} \item -the basis of its \grammarterm{declaration}, +$D$ is decl-reachable from $M$, or +\item +$D$ redeclares $M$ or $M$ redeclares $D$ +and $D$ is neither a friend declaration +nor a block-scope declaration, or +\item +$D$ is a namespace and $M$ is a member of $D$, or \item -the set of entities (if any) designated by -the default template arguments for -non-type template parameters and template template parameters, +one of $M$ and $D$ is a class or class template +and the other is a member or friend declaration +of that class or class template, or \item -the type-bases of the default type template arguments, +one of $D$ and $M$ is an enumeration +and the other is an enumerator of that enumeration, or \item -the enclosing context of $D$, and +$D$ is a function and $M$ is declared in $D$, or \item -if $D$ declares a partial specialization, -the set comprising the primary template. +$D$ is a closure type and $M$ is declared in +the \grammarterm{lambda-expression} corresponding to $D$, or +\item +one of $M$ and $D$ is a template and the other is +a partial or explicit specialization or +an implicit or explicit instantiation of that template, or +\item +one of $M$ and $D$ is a class or enumeration type +and the other introduces a typedef name for linkage purposes for that type, \end{itemize} +\end{itemize} +except as follows: +\begin{itemize} +\item +it is unspecified whether refernces to +\grammarterm{alias-declaration}{s}, +\tcode{typedef} declarations, +\grammarterm{using-declaration}{s}, and +\grammarterm{namespace-alias-declaration}{s} +are replaced by the declarations they name +prior to this determination, and -\item If $D$ is an \grammarterm{explicit-instantiation} -or an \grammarterm{explicit-specialization}, the basis is the union of -the basis of the \grammarterm{declaration} of $D$ and -%the set comprising the primary template. -the template-specialization-basis of the specialization. - -\item If $D$ is a \grammarterm{namespace-definition}, the basis is -the set comprising the innermost enclosing namespace, if any, -and otherwise is the empty set. - -\item If $D$ is a \grammarterm{namespace-alias-definition}, the basis is -the set comprising the namespace denoted by the -\grammarterm{qualified-namespace-specifier}. - -\item If $D$ is a \grammarterm{using-declaration}, the basis is the union -of the bases of all the declarations introduced by -the \grammarterm{using-declarator}{s}. - -\item Otherwise, the basis is empty. +\item +it is unspecified whether non-value-dependent +constant expressions are replaced by the result of +constant evaluation +prior to this determination. \end{itemize} \pnum +A declaration \tcode{D} in a global module fragment of a module unit +is \term{discarded} if \tcode{D} +is not decl-reachable from any \grammarterm{top-level-declaration} +in the \grammarterm{top-level-declaration-seq} +of the \grammarterm{translation unit}. \begin{note} -The basis of a declaration -does not include entities used in expressions, -other than those designated by non-type template arguments. +A discarded declaration is neither reachable +nor visible to name lookup outside the module unit, +nor in template instantiations whose points of instantiation +(\stdref{temp.point}{12.7.4.1}) are outside the module unit, +even when the instantiation context (\ref{module.context}) +includes the module unit. +\end{note} + +\pnum \begin{example} \begin{codeblock} const int size = 2; -int ary1[size]; // \tcode{size} not in \tcode{ary1}'s basis +int ary1[size]; // unspecified whether \tcode{size} is decl-reachable from \tcode{ary1} constexpr int identity(int x) { return x; } -int ary2[identity(2)]; // \tcode{identity} not in \tcode{ary2}'s basis +int ary2[identity(2)]; // unspecified whether \tcode{identity} is decl-reachable from \tcode{ary2} template struct S; template struct S2; constexpr int g(int); template -S> f(); // \tcode{f}'s basis: $\{ \mathtt{S}, \mathtt{S2}, \mathtt{::} \}$ +S> f(); // \tcode{S}, \tcode{S2}, \tcode{g}, and \tcode{::} are decl-reachable from \tcode{f} template -void h() noexcept(g(N) == N); // \tcode{h}'s basis: $\{ \mathtt{::} \}$ +void h() noexcept(g(N) == N); // \tcode{g} and \tcode{::} are decl-reachable from \tcode{h} \end{codeblock} \end{example} -\end{note} - -\pnum -The \term{interface purview} of a module unit -is its purview excluding any \grammarterm{private-module-fragment}. - -\pnum -Certain declarations in the global module fragment of a module unit $U$ -are \term{gmf-referenced} -as described below. -Except for declarations of functions and function templates, -all declarations -named by -\grammarterm{id-expression}{s}, -\grammarterm{namespace-name}{s}, -\grammarterm{type-name}{s}, -\grammarterm{template-name}{s}, and -\grammarterm{concept-name}{s} -appearing -in the interface purview of $U$ or -in a template instantiation whose point of instantiation is in that interface purview -are gmf-referenced. -Given an expression -in the interface purview of $U$ or -in a template instantiation whose point of instantiation is in that interface purview: -\begin{itemize} -\item -The declarations of any function -named by the expression (\stdref{basic.def.odr}{6.2}) -are gmf-referenced. -\item -For an expression of the form - -\begin{ncsimplebnf} -postfix-expression \terminal{(} expression-list\opt{} \terminal{)} -\end{ncsimplebnf} -whose \grammarterm{postfix-expression} denotes a dependent name, -or for an operator expression whose operator denotes a dependent name, -consider an expression synthesized from it -by replacing each type-dependent argument or operand -with a value of a placeholder type -with no associated namespaces or entities. -All declarations found by name lookup -for the corresponding name -in the synthesized expression are gmf-referenced. -\item -For an expression that takes the address of an overloaded function (\stdref{over.over}{11.4}) -for which the overload cannot be resolved because the target type is dependent, -all members of the set of overload functions are gmf-referenced. -\end{itemize} -The declarations of entities in the basis of a gmf-referenced declaration are gmf-referenced, recursively. - -\pnum -A declaration \tcode{D} in a global module fragment is \term{discarded} if \tcode{D} -is not gmf-referenced. -\begin{note} -A discarded declaration is neither reachable -nor visible to name lookup outside the module unit, -nor in template instantiations whose points of instantiation -(\stdref{temp.point}{12.7.4.1}) are outside the module unit, -even when the instantiation context (\ref{module.context}) -includes the module unit. -\end{note} \pnum \begin{example} @@ -870,27 +784,28 @@ #include "foo.h" export module M; template int use_f() { - N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} - return f(x); // gmf-references \tcode{N::f} and \tcode{N::d}, and indirectly \tcode{N::X}, \tcode{N}, and \tcode{::} + N::X x; // \tcode{N::X}, \tcode{N}, and \tcode{::} are decl-reachable from \tcode{use_f} + return f(x); // \tcode{N::f} and \tcode{N::d} are decl-reachable from \tcode{use_f} } template int use_g() { - N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} - return g((T(), x)); // does not gmf-reference any declarations + N::X x; // \tcode{N::X}, \tcode{N}, and \tcode{::} are decl-reachable from \tcode{use_f} + return g((T(), x)); // \tcode{N::g} is not decl-reachable from \tcode{use_g} } template int use_h() { - N::X x; // gmf-references \tcode{N::X}, \tcode{N}, and indirectly \tcode{::} - return h((T(), x)); // does not gmf-reference any declarations in template definition, - // gmf-references \tcode{N::h}, and indirectly \tcode{N::X}, \tcode{N}, and \tcode{::} in instantiation of \tcode{use_h} + N::X x; // \tcode{N::X}, \tcode{N}, and \tcode{::} are decl-reachable from \tcode{use_h} + return h((T(), x)); // \tcode{N::h} is not decl-reachable from \tcode{use_h}, but + // \tcode{N::h} is decl-reachable from \tcode{use_h} } int k = use_h(); - // \tcode{N::h} is gmf-referenced because \tcode{use_h} has a point of - // instantiation in the module unit \tcode{M} + // \tcode{use_h} is decl-reachable from \tcode{k}, so + // \tcode{N::h} is decl-reachable from \tcode{k} // module \tcode{M} implementation module M; int a = use_f(); // OK -int b = use_g(); // error: no viable function for call to \tcode{g} because - // \tcode{g} is not gmf-referenced so is discarded +int b = use_g(); // error: no viable function for call to \tcode{g}; + // \tcode{g} is not decl-reachable from purview of + // module \tcode{M}{'s} interface, so is discarded int c = use_h(); // OK \end{codeblock} \end{example} From 8690addf33cbd6152a080360858e781610df41e5 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 21 Feb 2019 11:19:56 -1000 Subject: [PATCH 71/77] CWG review. --- src/modules.tex | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index e251ccf..0f2d506 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -644,10 +644,11 @@ \exitnote \pnum -A declaration $D$ is \term{decl-reachable} from a declaration $S$ if: +A declaration $D$ is \term{decl-reachable} from a declaration $S$ +in the same translation unit if: \begin{itemize} \item -$D$ is not a function or function template and +$D$ does not declare a function or function template and $S$ contains an \grammarterm{id-expression}, \grammarterm{namespace-name}, @@ -657,7 +658,7 @@ naming $D$, or \item -$D$ is a function or function template and +$D$ declares a function or function template that is named by an expression (\stdref{basic.def.odr}{6.2}) appearing in $S$, or @@ -688,29 +689,26 @@ \item $D$ is decl-reachable from $M$, or \item -$D$ redeclares $M$ or $M$ redeclares $D$ +$D$ redeclares the entity declared by $M$ or +$M$ redeclares the entity declared by $D$, and $D$ is neither a friend declaration nor a block-scope declaration, or \item -$D$ is a namespace and $M$ is a member of $D$, or +$D$ declares a namespace $N$ and $M$ is a member of $N$, or \item -one of $M$ and $D$ is a class or class template -and the other is a member or friend declaration -of that class or class template, or +one of $M$ and $D$ declares a class or class template $C$ +and the other is a member or friend declaration of $C$, or \item -one of $D$ and $M$ is an enumeration -and the other is an enumerator of that enumeration, or +one of $D$ and $M$ declares an enumeration $E$ +and the other is an enumerator of $E$, or \item -$D$ is a function and $M$ is declared in $D$, or +$D$ declares a function or variable and $M$ is declared in $D$, or \item -$D$ is a closure type and $M$ is declared in -the \grammarterm{lambda-expression} corresponding to $D$, or -\item -one of $M$ and $D$ is a template and the other is +one of $M$ and $D$ declares a template and the other declares a partial or explicit specialization or an implicit or explicit instantiation of that template, or \item -one of $M$ and $D$ is a class or enumeration type +one of $M$ and $D$ declares a class or enumeration type and the other introduces a typedef name for linkage purposes for that type, \end{itemize} \end{itemize} From 9f0cf050fc009041169458d7a322d69800f3dff9 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 21 Feb 2019 13:39:02 -1000 Subject: [PATCH 72/77] More CWG feedback. --- src/modules.tex | 59 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index 0f2d506..698af42 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -683,8 +683,8 @@ for which the target type is dependent, or \item -there exists a declaration $M$, not of a namespace, for which -$M$ is decl-reachable from $S$ and either +there exists a declaration $M$ that is not a \grammarterm{namespace-definition} +for which $M$ is decl-reachable from $S$ and either \begin{itemize} \item $D$ is decl-reachable from $M$, or @@ -697,36 +697,51 @@ $D$ declares a namespace $N$ and $M$ is a member of $N$, or \item one of $M$ and $D$ declares a class or class template $C$ -and the other is a member or friend declaration of $C$, or +and the other declares a member or friend of $C$, or \item one of $D$ and $M$ declares an enumeration $E$ -and the other is an enumerator of $E$, or +and the other declares an enumerator of $E$, or \item -$D$ declares a function or variable and $M$ is declared in $D$, or +$D$ declares a function or variable and $M$ is declared in $D$,% +\footnote{A declaration can appear within a \grammarterm{lambda-expression} +in the initializer of a variable.} or \item one of $M$ and $D$ declares a template and the other declares a partial or explicit specialization or an implicit or explicit instantiation of that template, or \item one of $M$ and $D$ declares a class or enumeration type -and the other introduces a typedef name for linkage purposes for that type, +and the other introduces a typedef name for linkage purposes for that type. \end{itemize} \end{itemize} -except as follows: +In this determination, it is unspecified \begin{itemize} \item -it is unspecified whether refernces to -\grammarterm{alias-declaration}{s}, -\tcode{typedef} declarations, -\grammarterm{using-declaration}{s}, and -\grammarterm{namespace-alias-declaration}{s} -are replaced by the declarations they name -prior to this determination, and +whether a reference to an +\grammarterm{alias-declaration}, +\tcode{typedef} declaration, +\grammarterm{using-declaration}, or +\grammarterm{namespace-alias-declaration} +is replaced by the declarations they name +prior to this determination, \item -it is unspecified whether non-value-dependent -constant expressions are replaced by the result of -constant evaluation +whether a \grammarterm{simple-template-id} +that does not denote a dependent type +and whose \grammarterm{template-name} names an alias template +is replaced by its denoted type +prior to this determination, + +\item +whether a \grammarterm{decltype-specifier} +that does not denote a dependent type +is replaced by its denoted type +prior to this determination, +and + +\item +whether a non-value-dependent constant expression +is replaced by the result of constant evaluation prior to this determination. \end{itemize} @@ -772,7 +787,8 @@ namespace N { struct X {}; int d(); - int f(X, int = d()); + int e(); + inline int f(X, int = d()) { return e(); } int g(X); int h(X); } @@ -783,7 +799,12 @@ export module M; template int use_f() { N::X x; // \tcode{N::X}, \tcode{N}, and \tcode{::} are decl-reachable from \tcode{use_f} - return f(x); // \tcode{N::f} and \tcode{N::d} are decl-reachable from \tcode{use_f} + return f(x, 123); // \tcode{N::f} is decl-reachable from \tcode{use_f} + // \tcode{N::e} is indirectly decl-reachable from \tcode{use_f} + // because it is decl-reachable from \tcode{N::f} + // \tcode{N::d} is decl-reachable from \tcode{use_f} + // because it is decl-reachable from \tcode{N::f} + // even though it is not used in this call } template int use_g() { N::X x; // \tcode{N::X}, \tcode{N}, and \tcode{::} are decl-reachable from \tcode{use_f} From 52845eb2045518e0a0ccafeee1a357a141cf84c2 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 21 Feb 2019 13:39:21 -1000 Subject: [PATCH 73/77] Remove FIXME; I'll be presenting this as an EWG paper instead. --- src/modules.tex | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index 698af42..8afdc9a 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -258,10 +258,6 @@ The interface of \tcode{M} comprises \tcode{A} and \tcode{A::f}. \end{example} -\textbf{\color{red}FIXME: The following rule should be checked -with EWG; it forbids (for example) \tcode{static_assert} within -an \tcode{export} block.} - \pnum An exported declaration shall declare at least one name. If the declaration is not within a header unit, From e548516938b7af6d19f0d6501fc2907534a8843c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 21 Feb 2019 13:44:12 -1000 Subject: [PATCH 74/77] Slightly simplify header unit export rules. --- src/modules.tex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules.tex b/src/modules.tex index 8afdc9a..bca1036 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -243,7 +243,7 @@ \item a \grammarterm{namespace-definition} that contains an exported declaration, or \item a declaration within a header unit (\ref{module.import}) - that satisfies the rules for an exported declaration below. + that introduces at least one name. \end{itemize} The \term{interface} of a module \tcode{M} is the set of all exported declarations within its purview. @@ -294,7 +294,8 @@ \pnum If the declaration is a \grammarterm{using-declaration} - (9.8 [namespace.udecl]), all entities to which all of the + (9.8 [namespace.udecl]) and is not within a header unit, + all entities to which all of the \grammarterm{using-declarator}{s} ultimately refer (if any) shall have been introduced with a name having external linkage. \begin{example} From 04e34db9069616df5a5a905701e306b1a7f649f0 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 22 Feb 2019 11:19:38 -1000 Subject: [PATCH 75/77] More CWG review. --- src/basic.tex | 54 +++++++++++++++++---------------- src/modules.tex | 57 ++++++++++++++++++++--------------- src/preprocessor.tex | 13 +++++--- src/templates.tex | 72 +++++++++++++++++++++++++++++++++----------- 4 files changed, 122 insertions(+), 74 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 4819e80..1f1425b 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -268,14 +268,16 @@ Modify paragraph 6.4.2/4 and add /5 as follows: \begin{std.txt} \pnum[4] - When considering an associated namespace, the lookup is the same as - the lookup performed when the associated namespace is used as a + When considering an associated namespace \added{\tcode{N}}, + the lookup is the same as + the lookup performed when \removed{the associated namespace} + \added{\tcode{N}} is used as a qualifier (6.4.3.2) except that: \begin{itemize} - \item Any \grammarterm{using-directive}{s} in the associated - namespace are ignored. + \item Any \grammarterm{using-directive}{s} in \removed{the associated + namespace} \added{\tcode{N}} are ignored. - \item Any namespace-scope friend declaration functions or friend + \item Any namespace-scope friend functions or friend function templates (10.7.3) declared in \removed{associated} classes \added{with reachable definitions in the set of associated entities} @@ -288,22 +290,22 @@ \color{addclr} \item - \added{Any function or function template in the interface of - a named module \tcode{M} (\ref{module.interface}) that has - the same innermost enclosing non-inline namespace as - some associated entity attached to \tcode{M} - is visible within its namespace - to a lookup that does not occur within a module unit of \tcode{M}, - even if it is not visible during an ordinary lookup.} + \added{Any declaration \tcode{D} in \tcode{N} + that is in the interface of + a named module \tcode{M} (\ref{module.interface}) + is visible + if there is an associated entity attached to \tcode{M} + with the same innermost enclosing non-inline namespace as \tcode{D}.} \item - \added{Any namespace-scope function or function template declarations - that are visible to qualified name lookup (\ref{basic.lookup.qual}) - at any point in the instantiation context (\ref{module.context}) of the lookup - are visible in their respective namespaces - even if they are not visible during an ordinary lookup, - excluding discarded declarations (\ref{module.global}) and - internal linkage declarations attached to the global module.} + \added{If the lookup is for a dependent name + (\stdref{temp.dep}{12.7.2}, \ref{temp.dep.candidate}), + any declaration \tcode{D} in \tcode{N} + is visible + if \tcode{D} would be visible to qualified name lookup (\ref{namespace.qual}) + at any point in the instantiation context (\ref{module.context}) of the lookup, + unless \tcode{D} is declared in another translation unit, attached to the global module, + and is either discarded (\ref{module.global}) or has internal linkage.} \end{itemize} \pnum @@ -341,13 +343,13 @@ struct Z { template operator T(); }; } void test() { - auto x = make(); // OK, \tcode{decltype(x)} is \tcode{R::X} in module \tcode{M} - R::f(x); // ill-formed: \tcode{R} and \tcode{R::f} are not visible here - f(x); // OK, calls \tcode{R::f} from interface of \tcode{M} - f(x, Z()); // ill-formed: \tcode{S::f} in module \tcode{M} not considered - // even though \tcode{S} is an associated namespace - apply(x, Z()); // OK, \tcode{S::f} is visible in instantiation context, and - // \tcode{R::g} is visible even though it has internal linkage + auto x = make(); // OK, \tcode{decltype(x)} is \tcode{R::X} in module \tcode{M} + R::f(x); // ill-formed: \tcode{R} and \tcode{R::f} are not visible here + f(x); // OK, calls \tcode{R::f} from interface of \tcode{M} + f(x, S::Z()); // ill-formed: \tcode{S::f} in module \tcode{M} not considered + // even though \tcode{S} is an associated namespace + apply(x, S::Z()); // OK, \tcode{S::f} is visible in instantiation context, and + // \tcode{R::g} is visible even though it has internal linkage } \end{codeblock} \added{\exitexample} diff --git a/src/modules.tex b/src/modules.tex index bca1036..b802a3d 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -888,8 +888,8 @@ import "defn.h"; // provides \tcode{struct X \{\};} import stuff; export template void f(T t) { - X x; - foo(t, x); + X x; + foo(t, x); } // translation unit \#3 @@ -897,27 +897,36 @@ import "decl.h"; // provides \tcode{struct X;} (not a definition) import stuff; export template void g(T t) { - X *x; - bar(t, x); + X *x; + bar(t, x); } // translation unit \#4 import M1; import M2; void test() { - f(0); // OK: the instantiation context of \tcode{foo} comprises - // the point at the end of translation unit \#1, - // the point at the end of translation unit \#2, and - // the point of the call to \tcode{f(0)} below, so - // the definition of \tcode{X} is reachable (\ref{module.reach}) - - g(0); // the instantiation context of \tcode{foo} comprises - // the point at the end of translation unit \#1, - // the point at the end of translation unit \#3, and - // the point of the call to \tcode{g(0)} below, so - // the definition of \tcode{X} is not necessarily reachable + f(0); + g(0); } \end{codeblock} +The call to \tcode{f(0)} is valid; +the instantiation context of \tcode{foo} comprises +\begin{itemize} +\item the point at the end of translation unit \#1, +\item the point at the end of translation unit \#2, and +\item the point of the call to \tcode{f(0)}, +\end{itemize} +so the definition of \tcode{X} is reachable (\ref{module.reach}). + +It is unspecified whether the call to \tcode{g(0)} is valid: +the instantiation context of \tcode{bar} comprises +\begin{itemize} +\item the point at the end of translation unit \#1, +\item the point at the end of translation unit \#3, and +\item the point of the call to \tcode{g(0)}, +\end{itemize} +so the definition of \tcode{X} is not necessarily reachable, +as described in \ref{module.reach}. \end{example} \end{std.txt} @@ -942,8 +951,8 @@ It is unspecified whether additional translation units on which the point within the program has an interface dependency are considered reachable, and under what circumstances.% -\footnote{Implementations are not required to prevent the semantic effects of -additional translation units involved in the compilation from being +\footnote{Implementations are therefore not required to prevent the semantic +effects of additional translation units involved in the compilation from being observed.} \begin{note} It is advisable to avoid @@ -952,7 +961,7 @@ \end{note} \pnum -A declaration $D$ is \term{reachable} or \term{necessarily reachable} if, +A declaration $D$ is \term{reachable} or \term{necessarily reachable}, respectively, if, for any point $P$ in the instantiation context (\ref{module.context}), \begin{itemize} @@ -970,10 +979,9 @@ \exitnote \pnum -The \term{reachable semantic properties} of an entity within a context -are the accumulated properties of all reachable declarations of -that entity, and determine the behavior of the entity within -that context. +The accumulated properties of all reachable declarations of +an entity within a context +determine the behavior of the entity within that context. \enternote These reachable semantic properties include type completeness, type definitions, initializers, @@ -1027,9 +1035,8 @@ \pnum \enternote -An entity can have reachable declarations and therefore -reachable semantic properties even if it is not visible -to name lookup. +An entity can have reachable declarations +even if it is not visible to name lookup. \exitnote \begin{example} \begin{codeblock} diff --git a/src/preprocessor.tex b/src/preprocessor.tex index b2c0576..02b2133 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -102,14 +102,14 @@ \color{addclr} \begin{bnf} \nonterminal{pp-global-module-fragment}:\br - \terminal{module} \terminal{;} pp-bracketed-tokens \terminal{module} + \terminal{module} \terminal{;} pp-balanced-token-seq \terminal{module} \end{bnf} \pnum If the first two preprocessing tokens at the start of phase 4 of translation are \tcode{module} \tcode{;}, the result of preprocessing shall begin with a \grammarterm{pp-global-module-fragment} for which all -\grammarterm{preprocessing-token}{s} in the \grammarterm{pp-bracketed-tokens} +\grammarterm{preprocessing-token}{s} in the \grammarterm{pp-balanced-token-seq} were produced directly or indirectly by source file inclusion (\ref{cpp.include}), and for which the second \tcode{module} \grammarterm{preprocessing-token} was not produced by source file inclusion or @@ -182,9 +182,12 @@ (\ref{module.import}) denoted by the \grammarterm{header-name}. A \grammarterm{pp-import} is only recognized when the sequence of tokens produced by phase 4 of translation up to the \tcode{import} token -forms a \grammarterm{import-seq}, and the \tcode{import} token is not -within the \grammarterm{pp-import-suffix} of another \grammarterm{pp-import}. -The \tcode{;} \grammarterm{preprocessing-token} shall not be produced by +forms an \grammarterm{import-seq}, and the \tcode{import} token is not +within the \grammarterm{header-name-tokens} or +\grammarterm{pp-import-suffix} of another \grammarterm{pp-import}. +The \tcode{;} \grammarterm{preprocessing-token} +terminating a \grammarterm{pp-import} +shall not be produced by macro replacement (\stdref{cpp.replace}{14.3}). The \term{point of macro import} for a \grammarterm{pp-import} is immediately after the \tcode{;} terminating the \grammarterm{pp-import}. diff --git a/src/templates.tex b/src/templates.tex index 023be13..10606f8 100644 --- a/src/templates.tex +++ b/src/templates.tex @@ -54,7 +54,10 @@ Change in paragraph \ref{temp.point}/8: \begin{std.txt} \pnum[8] -in addition to the points of instantiation described above, for any such +in addition to the points of instantiation described above, +\begin{itemize} +\item +for any such specialization that has a point of instantiation within the \added{\grammarterm{top-level-declaration-seq} of the} translation unit, @@ -62,10 +65,13 @@ the point after the \grammarterm{top-level-declaration-seq} of the \grammarterm{translation-unit} is also considered a point of instantiation, -and for any such specialization that has a point of instantiation +and} +\item +\added{for any such specialization that has a point of instantiation within the \grammarterm{private-module-fragment},} the end of the translation unit is also considered a point of instantiation. +\end{itemize} \end{std.txt} \rSec3[temp.dep.candidate]{Candidate functions} @@ -74,10 +80,27 @@ Modify paragraph 12.7.4.2/1 as follows \begin{std.txt} \pnum[1] -\ldots +For a function call where the \grammarterm{postfix-expression} is a +dependent name, +the candidate functions are found using the usual lookup +rules \added{from the template definition context}~(\stdref{basic.lookup.unqual}{6.4.1}, \ref{basic.lookup.argdep})\added{.} +\removed{except that:} +\added{\enternote} +\begin{itemize} +\item +\removed{For the part of the lookup using unqualified name lookup (\stdref{basic.lookup.unqual}{6.4.1}), +only function declarations +from the template definition context are found.} +\item +For the part of the lookup using associated namespaces (\ref{basic.lookup.argdep}), +\removed{only} function declarations found in \removed{either the template +definition context or} the template instantiation context are found +\added{by this lookup, as described in \ref{basic.lookup.argdep}}. +\end{itemize} +\added{\exitnote} If the call would be ill-formed or would find a better match had the lookup within the associated namespaces considered all the function -declarations with external \added{or module} +declarations with external linkage introduced in those namespaces in all translation units, not just considering those declarations found in the template definition and template instantiation contexts, then the program @@ -86,9 +109,9 @@ Append new paragraphs as follows: -\begin{std.txt} +\begin{std.txt}\color{addclr} \pnum[2] -\enterexample\color{addclr} +\enterexample \begin{codeblock} // header file \tcode{"X.h"} namespace Q { @@ -130,16 +153,15 @@ export template void indirect_swap(Iter lhs, Iter rhs) { - swap(*lhs, *rhs); // swap can be found only via ADL + swap(*lhs, *rhs); // \tcode{swap} not found by unqualified lookup, can be found only via ADL } // interface unit of \tcode{M} -module; -import Std; export module M; +import Std; struct S { /* ...*/ }; -void swap(S&, S&); // \#1; +void swap(S&, S&); // \#1 void f(S* p, S* q) { @@ -165,8 +187,8 @@ // module interface unit of \tcode{M} module; #include "X.h" -import F; export module M; +import F; void g(X x) { f(x); // OK: instantiates \tcode{f} from \tcode{F}, // \tcode{operator+} is visible in instantiation context @@ -181,7 +203,8 @@ export module A; export template void f(T t) { - t + t; // \#1 + cat(t, t); // \#1 + dog(t, t); // \#2 } // module interface unit of \tcode{B} @@ -192,35 +215,48 @@ f(t); } +// \tcode{"foo.h"}, not an importable header +struct foo { + friend int cat(foo, foo); +}; +int dog(foo, foo); + // module interface unit of \tcode{C1} module; -#include // \tcode{operator+} not referenced, discarded +#include "foo.h" // \tcode{dog} not referenced, discarded export module C1; import B; export template void h(T t) { - g(std::string{ }, t); + g(foo{ }, t); } // translation unit import C1; void i() { - h(0); // ill-formed: '+' not found at \#1 + h(0); // error: \tcode{dog} not found at \#2 } +// \tcode{"bar.h"}, an importable header +struct bar { + friend int cat(bar, bar); +}; +int dog(bar, bar); + // module interface unit of \tcode{C2} +module; +#include "bar.h" // imports header unit \tcode{"bar.h"} export module C2; import B; -import ; export template void j(T t) { - g(std::string{ }, t); + g(bar{ }, t); } // translation unit import C2; void k() { - j(0); // OK, '+' found in instantiation context: + j(0); // OK, \tcode{dog} found in instantiation context: // visible at end of module interface unit of \tcode{C2} } \end{codeblock} From 053195dfb9a41350ab24c111d50ccb24ba87bf67 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 22 Feb 2019 13:54:20 -1000 Subject: [PATCH 76/77] More CWG review. --- src/basic.tex | 22 +++++++++++----------- src/compat.tex | 24 ++++++++---------------- src/preprocessor.tex | 6 +++--- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/basic.tex b/src/basic.tex index 1f1425b..3abc675 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -114,17 +114,17 @@ \end{before} \begin{after} \added{% -If a translation unit $M$ is imported into a translation unit $N$ (\ref{module.import}), -the potential scope of a name $X$ declared with namespace scope in $M$ +If a translation unit $Q$ is imported into a translation unit $R$ (\ref{module.import}), +the potential scope of a name $X$ declared with namespace scope in $Q$ is extended to include the portion of the corresponding namespace -scope in $N$ following the first \grammarterm{module-import-declaration} +scope in $R$ following the first \grammarterm{module-import-declaration} or \grammarterm{module-declaration} -in $N$ that imports $M$ (directly or indirectly) if +in $R$ that imports $Q$ (directly or indirectly) if } \color{addclr} \begin{itemize} \item \added{$X$ does not have internal linkage, and} -\item \added{$X$ is declared after the \grammarterm{module-declaration} in $M$ (if any), and} -\item \added{either $X$ is exported or $M$ and $N$ are part of the same module.} +\item \added{$X$ is declared after the \grammarterm{module-declaration} in $Q$ (if any), and} +\item \added{either $X$ is exported or $Q$ and $R$ are part of the same module.} \end{itemize} \end{after} \color{addclr} @@ -140,16 +140,16 @@ \enterexample} \begin{codeblock} // Translation unit \#1 - export module M; + export module Q; export int sq(int i) { return i*i; } // Translation unit \#2 - export module N; - export import M; + export module R; + export import Q; // Translation unit \#3 - import N; - int main() { return sq(9); } // OK: \tcode{sq} from module \tcode{M} + import R; + int main() { return sq(9); } // OK: \tcode{sq} from module \tcode{Q} \end{codeblock} \added{ \exitexample diff --git a/src/compat.tex b/src/compat.tex index ceee452..32c522b 100644 --- a/src/compat.tex +++ b/src/compat.tex @@ -17,21 +17,13 @@ \textbf{Rationale:} Required for new features.\\ \textbf{Effect on original feature:} When the identifier \tcode{import} -is followed by a \tcode{<} or \tcode{"} character -with intervening whitespace, +is followed by a \tcode{<} character, a \grammarterm{header-name} token may be formed. \begin{example} \begin{codeblock} template class import {}; -void f(import ); // ill-formed; previously well-formed -void f(import); // OK - -#define import "foo" -const char *p = import "bar"; // ill-formed: cannot concatenate \grammarterm{header-name} tokens - -#define EMPTY -#define import EMPTY "foo" -const char *q = import"bar"; // OK +import f(); // ill-formed; previously well-formed +::import g(); // OK \end{codeblock} \end{example} \end{std.txt} @@ -54,12 +46,12 @@ \begin{example} \begin{codeblock} class module; -module *m; // ill-formed; previously well-formed -::module *m; // OK +module *m1; // ill-formed; previously well-formed +::module *m2; // OK -class import; -import j; // was variable declaration; now \grammarterm{import-declaration} -::import j; // variable declaration +class import {}; +import j1; // was variable declaration; now \grammarterm{import-declaration} +::import j2; // variable declaration \end{codeblock} \end{example} \end{std.txt} diff --git a/src/preprocessor.tex b/src/preprocessor.tex index 02b2133..46995bf 100644 --- a/src/preprocessor.tex +++ b/src/preprocessor.tex @@ -187,7 +187,7 @@ \grammarterm{pp-import-suffix} of another \grammarterm{pp-import}. The \tcode{;} \grammarterm{preprocessing-token} terminating a \grammarterm{pp-import} -shall not be produced by +shall not have been produced by macro replacement (\stdref{cpp.replace}{14.3}). The \term{point of macro import} for a \grammarterm{pp-import} is immediately after the \tcode{;} terminating the \grammarterm{pp-import}. @@ -262,7 +262,7 @@ // translation unit b.h import "a.h"; // point of definition of \#1, \#2, and \#3, point of undefinition of \#1 in \tcode{b.h} #define X 456 // OK, \#1 is not active -#define Y 6 // ill-formed; \#2 is active +#define Y 6 // error: \#2 is active \end{codeblock} \begin{codeblock} @@ -276,7 +276,7 @@ import "a.h"; // point of definition of \#1, \#2, and \#3, point of undefinition of \#1 in \tcode{d.h} import "c.h"; // point of definition of \#4 and \#5 in \tcode{d.h} int a = Y; // OK, active macro definitions \#2 and \#3 are valid redefinitions -int c = Z; // ill-formed; active macro definitions \#2 and \#3 are not valid redefinitions of \tcode{Z} +int c = Z; // error: active macro definitions \#2 and \#3 are not valid redefinitions of \tcode{Z} \end{codeblock} \end{example} \end{std.txt} From be57ba589b535653ef95636beaf478d7ad85d1fe Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 22 Feb 2019 14:59:08 -1000 Subject: [PATCH 77/77] P1103R3 ready for vote --- src/basic.tex | 5 ++++- src/config.tex | 2 +- src/modules.tex | 12 +++++++----- src/p1103r3.pdf | Bin 0 -> 550054 bytes 4 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 src/p1103r3.pdf diff --git a/src/basic.tex b/src/basic.tex index 3abc675..1a38779 100644 --- a/src/basic.tex +++ b/src/basic.tex @@ -413,7 +413,10 @@ \begin{std.txt} \pnum[1] \added{A \grammarterm{private-module-fragment} shall appear only -in a primary module interface unit (\ref{module.unit}).} +in a primary module interface unit (\ref{module.unit}). +A module unit with a \grammarterm{private-module-fragment} +shall be the only module unit of its module; +no diagnostic is required.} \pnum \added{A token sequence beginning with diff --git a/src/config.tex b/src/config.tex index a1b462c..3eba2ed 100644 --- a/src/config.tex +++ b/src/config.tex @@ -1,7 +1,7 @@ %!TEX root = ts.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{D1103R3} +\newcommand{\docno}{P1103R3} \newcommand{\prevdocno}{P1103R2} %\newcommand{\cppver}{201703L} diff --git a/src/modules.tex b/src/modules.tex index b802a3d..896fa45 100644 --- a/src/modules.tex +++ b/src/modules.tex @@ -66,7 +66,7 @@ by the primary module interface unit (\ref{module.import}). No diagnostic is required for a violation of these rules. \enternote -Module partitions can only be imported by +Module partitions can be imported only by other module units in the same module. The division of a module into module units is not visible outside the module. @@ -348,8 +348,9 @@ \begin{codeblock} export module M; struct S { int n; }; - export typedef S S; // OK, not a redeclaration of \tcode{struct S} - export struct S; // error: exported declaration follows non-exported definition + typedef S S; + export typedef S S; // OK, does not redeclare an entity + export struct S; // error: exported declaration follows non-exported declaration \end{codeblock} \end{example} @@ -481,7 +482,8 @@ In a module unit, all \grammarterm{module-import-declaration}{s} shall precede all other \grammarterm{top-level-declaration}{s} in the \grammarterm{top-level-declaration-seq} of the - \grammarterm{translation-unit}. + \grammarterm{translation-unit} + and of the \grammarterm{private-module-fragment} (if any). The optional \grammarterm{attribute-specifier-seq} appertains to the \grammarterm{module-import-declaration}. @@ -506,7 +508,7 @@ \pnum A \grammarterm{module-import-declaration} that specifies a \grammarterm{module-partition} shall only appear after - the \grammarterm{module-declaration} in a module unit in + the \grammarterm{module-declaration} in a module unit of some module $M$. Such a declaration imports the so-named module partition of $M$. diff --git a/src/p1103r3.pdf b/src/p1103r3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f50d4c7aae0a7291aa544b9f77a3ada7a5a4fb6 GIT binary patch literal 550054 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 = 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

o^*A@1KEb)J3&OJD%PBCnP?+ySMh_~G(8Ks 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

&*CMI^UcvDIa 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

&10qPUrwn-c-|C}Czh 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 literal 0 HcmV?d00001