|
Boost-Commit : |
From: dgregor_at_[hidden]
Date: 2008-06-11 16:25:42
Author: dgregor
Date: 2008-06-11 16:25:41 EDT (Wed, 11 Jun 2008)
New Revision: 46337
URL: http://svn.boost.org/trac/boost/changeset/46337
Log:
Concept parameters|arguments to template parameters|arguments
Text files modified:
sandbox/committee/concepts/wording/wording.tex | 121 +++++++++++++++++++++++----------------
1 files changed, 70 insertions(+), 51 deletions(-)
Modified: sandbox/committee/concepts/wording/wording.tex
==============================================================================
--- sandbox/committee/concepts/wording/wording.tex (original)
+++ sandbox/committee/concepts/wording/wording.tex 2008-06-11 16:25:41 EDT (Wed, 11 Jun 2008)
@@ -1381,8 +1381,12 @@
that has a
\mbox{\techterm{member-requirement}} (\mbox{\ref{temp.req}}) is a
\mbox{\techterm{constrained member}} and shall only occur in a class
-template (\mbox{\ref{temp.class}}) or nested class thereof. A
-constrained member shall be a member function. A constrained member is
+template (\mbox{\ref{temp.class}}) or nested class thereof.}
+\removedCCC{A
+constrained member shall be a member function.}
+\addedCC{The \mbox{\techterm{member-declaration}} for a constrained
+ member shall declare a member function.}
+\addedConcepts{A constrained member is
treated as a constrained template (\mbox{\ref{temp.constrained}})}
\addedCC{whose template requirements include the requirements
specified in its \mbox{\techterm{member-requirement}} clause}\addedConcepts{.}
@@ -2370,8 +2374,7 @@
\addedCC{\mbox{\terminal{::}}\mbox{\opt} nested-name-specifier\mbox{\opt} concept-name \mbox{\terminal{...}}\mbox{\opt} identifier\mbox{\opt}}\br
\addedCC{\mbox{\terminal{::}\opt} nested-name-specifier\mbox{\opt} concept-name identifier\mbox{\opt} constrained-default-argument\mbox{\opt}}\br
\addedCC{\mbox{\terminal{::}\opt} nested-name-specifier\mbox{\opt} concept-name \mbox{\terminal{<}}} \addedCC{simple-requirement-argument-list} \addedCC{\mbox{\terminal{>}} \mbox{\terminal{...}\opt} identifier} \br
- \addedCC{\mbox{\terminal{::}\opt} nested-name-specifier\mbox{\opt} concept-name \mbox{\terminal{<}}} \addedCC{simple-requirement-argument-list} \addedCC{\mbox{\terminal{>}}} \addedCC{identifier}
- \addedCC{constrained-default-argument\mbox{\opt}}\br
+ \addedCC{\mbox{\terminal{::}\opt} nested-name-specifier\mbox{\opt} concept-name \mbox{\terminal{<}}} \addedCC{simple-requirement-argument-list} \addedCC{\mbox{\terminal{>}}} \addedCC{identifier} \addedCC{constrained-default-argument\mbox{\opt}}\br
\index{constrained-default-argument@\techterm{constrained-default-argument}}%
\addedCC{constrained-default-argument:}\br
@@ -2456,9 +2459,9 @@
\BnfNontermshape{nested-name-specifier}\opt\}}} \mbox{\tcode{C<T, T2, T3, ...,
T$N$>...\opt}} added to the template requirements.
}
-\removedCC{
-The first concept parameter of concept \mbox{\tcode{C}}
-shall be a type parameter, and all concept parameters not otherwise
+\removedCCC{
+The first template parameter of concept \mbox{\tcode{C}}
+shall be a type parameter, and all template parameters not otherwise
specified shall have default values. \mbox{\enterexample}}
\begin{codeblock}
concept C<typename T> { ... }
@@ -2575,7 +2578,7 @@
\mbox{\exitexample}
-\addedConcepts{\mbox{\enternote} a template parameter pack can also occur in a concept parameter list
+\addedConcepts{\mbox{\enternote} a template parameter pack can also occur in a concept's template parameter list
(\mbox{\ref{concept.def}}). \mbox{\enterexample}} \color{addclr}
\begin{codeblock}
@\textcolor{addclr}{auto}@ concept Callable<typename F, typename... Args> {
@@ -2976,9 +2979,9 @@
\addedConcepts{During concept map lookup (\mbox{\ref{temp.req.sat}}),
concept map matching determines whether a
particular concept map template can be used. Concept map matching
-matches the concept arguments in the
+matches the template arguments in the
\mbox{\techterm{concept instance}} to the
-concept arguments in the concept map template, using matching of class
+template arguments in the concept map template, using matching of class
template partial specializations (\mbox{\ref{temp.class.spec.match}}).}
\pnum
@@ -2989,8 +2992,8 @@
at least as specialized as the second according to the rules for
partial ordering of class template partial specializations
(\mbox{\ref{temp.class.order}}). The primary class template \mbox{\tcode{X}}
- has the same template parameters as the concept corresponding to the
- two concept map templates. The class template partial
+ has the same template parameters as the concept of the
+ concept map templates. The class template partial
specializations are constrained templates, even if the corresponding
concept map templates have no requirements specified.}
\begin{itemize}
@@ -3489,7 +3492,7 @@
\addedConcepts{A \mbox{\techterm{concept-id}} names a specific use of
a concept by its
\mbox{\techterm{concept-name}} and a set of
-concept arguments. The concept and its concept arguments,
+template arguments. The concept and its template arguments,
together, are referred to as a \mbox{\techterm{concept instance}}.
\mbox{\enterexample}\ \mbox{\tcode{CopyConstructible<int>}} is a
\mbox{\techterm{concept-id}} if name lookup (\mbox{\ref{basic.lookup}}) determines
@@ -3569,7 +3572,7 @@
\addedConcepts{Associated functions describe functions, member functions, or
operators}
\addedConcepts{(including templates thereof)}
-\addedConcepts{that specify the functional behavior of the concept
+\addedConcepts{that specify the functional behavior of the concept's template
arguments and associated types and}
\addedCC{class}
\addedConcepts{templates (\mbox{\ref{concept.assoc}}). A
@@ -3785,7 +3788,7 @@
\rSec3[concept.req]{Associated requirements}
\pnum
-\addedConcepts{Associated requirements place additional requirements on concept
+\addedConcepts{Associated requirements place additional requirements on the concept's template
parameters, associated types, and associated}
\addedCC{class}
\addedConcepts{templates. Associated
@@ -4029,7 +4032,7 @@
types and associated}
\addedCC{class} \addedConcepts{templates from the concept after
substitution of
- the concept parameters with the corresponding concept arguments.
+ the concept's template parameters with the corresponding template arguments.
\mbox{\enternote}
There is no way to explicitly declare a requirement member.
\mbox{\exitnote}
@@ -4045,13 +4048,16 @@
\pnum
\addedConcepts{
After a requirement is satisfied, the requirement member serves as a
- synonym for the }\changedCCC{set of entities (possibly satisfier members) that
- satisfies }{entity that satisfies} \addedConcepts{the requirement.}
+ synonym for the set of entities}
+ \removedCCC{(possibly satisfier members)}
+ \addedConcepts{that satisfies the requirement}
+ \addedCC{(\mbox{\ref{concept.map.fct}}, \mbox{\ref{concept.map.assoc}})}
+ \addedConcepts{.}
\addedCC{That entity is said to be the \mbox{\techterm{satisfier}} of
the requirement member.}
\addedConcepts{Each requirement member is visible during
qualified name lookup (\mbox{\ref{concept.qual}}).}
- \addedCC{\mbox{\enternote} a satisfier need not be a member of a
+ \addedCC{\mbox{\enternote} A satisfier need not be a member of a
concept map. \mbox{\exitnote}}
\pnum
@@ -4061,7 +4067,7 @@
least one requirement member of its enclosing concept map or at least
one unsatisfied requirement member from a refined concept map.}
\changedCCC{ A satisfier member}{
- A member that satisfies a requirement member}
+ A concept map member that satisfies a requirement member}
\addedConcepts{cannot be found by any form of name lookup
(\mbox{\ref{basic.lookup}}).}
@@ -4071,8 +4077,8 @@
any requirement members or satisfier members.
The set of members of a concept map archetype is the set of associated
functions, associated types and associated templates from the concept
- after substitution of the concept parameters with the corresponding
- concept arguments of the concept map archetype. Within a constrained
+ after substitution of the concept's template parameters with the corresponding
+ template arguments of the concept map archetype. Within a constrained
template, these members are treated as if they were real functions,
types and templates for the purposes of syntactic and semantic
analysis.}{is considered to have satisfiers (generated from the
@@ -4225,7 +4231,7 @@
\pnum
\addedConcepts{Function definitions in the concept map can be used to adapt the
-syntax of the concept arguments
+syntax of the concept's template arguments
to the syntax expected by the concept. \mbox{\enterexample}}
\begin{codeblock}
concept Stack<typename S> {
@@ -4259,7 +4265,7 @@
satisfied as follows. Given an associated function (call it
\mbox{\tcode{f}}), let \mbox{\tcode{R}}
be the return type of \mbox{\tcode{f}}, after substitution of
- concept arguments for their corresponding concept
+ the concept's template arguments for their corresponding concept
parameters. Construct an expression \mbox{\tcode{E}}}
\addedCC{(as defined below)}
\addedConcepts{in the scope of
@@ -4534,8 +4540,8 @@
determined using the rules of template argument deduction from a
type (\mbox{\ref{temp.deduct.type}}). Let
\mbox{\tcode{P}} be the return type of an associated function after
- substitution of the concept parameters specified by the concept map
- with their concept arguments, and where each undefined associated
+ substitution of the concept's template parameters specified by the concept map
+ with their template arguments, and where each undefined associated
type and associated}
\addedCC{class}
\addedConcepts{template has been replaced with a newly invented
@@ -4630,7 +4636,7 @@
%
\addedConcepts{\mbox{\enternote}\
when a concept \mbox{\tcode{D}} refines
-a concept \mbox{\tcode{B}}, every set of concept arguments that satisfies the
+a concept \mbox{\tcode{B}}, every set of template arguments that satisfies the
requirements of \mbox{\tcode{D}} also satisfies the requirements of
\mbox{\tcode{B}}. The refinement relationship is transitive.
\mbox{\exitnote}}
@@ -4659,18 +4665,18 @@
\addedConcepts{\mbox{\exitexample}}
\pnum
-\addedConcepts{A \mbox{\techterm{refinement-specifier}} in the refinement clause shall not refer
+\removedCCC{A \mbox{\techterm{refinement-specifier}} in the refinement clause shall not refer
to associated types.}
\pnum
\addedConcepts{The \mbox{\techterm{template-argument-list}} of a
\mbox{\techterm{refinement-specifier}}'s \mbox{\techterm{concept-id}} shall refer to at
- least one of the concept parameters}\addedCC{, and no concept
+ least one of the template parameters}\addedCC{, and no template
parameter shall be used in a way that establishes an
archetype}\addedConcepts{. \mbox{\enterexample}}
\begin{codeblock}
concept InputIterator<typename Iter>
- : Incrementable<int> // error: Incrementable<int> uses no concept parameters
+ : Incrementable<int> // error: Incrementable<int> uses no template parameters
{
// ...
}
@@ -4678,7 +4684,7 @@
\addedConcepts{\mbox{\exitexample}}
\pnum
-\removedCCC{Within the definition of a concept, a concept map archetype
+\addedConcepts{Within the definition of a concept, a concept map archetype
(\mbox{\ref{temp.archetype}}) is synthesized for each
\mbox{\techterm{refinement-specifier}} in the concept's
\mbox{\techterm{refinement-clause}} (if any).}
@@ -4934,13 +4940,14 @@
map template that are not compatible with their corresponding}
\changedCCC{definitions in}{satisfiers of}
\addedConcepts{a refined concept map or concept map template, the
-program is ill-formed.
-\mbox{\enternote} if the concept maps or concept map templates with
-}
+program is ill-formed.}
+\removedCCC{\mbox{\enternote}}
+\addedConcepts{if the concept maps or concept map templates with}
\changedCCC{definitions}{satisfiers}
\addedConcepts{that are not compatible occur in different translation
-units, no diagnostic is required. \mbox{\exitnote}\
-\mbox{\enterexample}}
+units, no diagnostic is required.}
+\removedCCC{\mbox{\exitnote}}
+\addedConcepts{\mbox{\enterexample}}
\begin{codeblock}
concept C<typename T> {
typename assoc;
@@ -5108,7 +5115,7 @@
\addedConcepts{A concept requirement that refers to the
\mbox{\tcode{SameType}} concept (\mbox{\ref{concept.support}}) is a
\mbox{\techterm{same-type requirement}}. A same-type requirement is satisfied
-when its two concept arguments refer to the same type (including the
+when its two template arguments refer to the same type (including the
same \mbox{\techterm{cv}} qualifiers). In a
constrained template (\mbox{\ref{temp.constrained}}), a same-type requirement
\mbox{\tcode{SameType<T1, T2>}} makes the types \mbox{\tcode{T1}} and \mbox{\tcode{T2}}
@@ -5301,10 +5308,10 @@
\pnum
\addedCC{When concept map lookup is performed during template argument
- deduction formed during partial ordering
+ deduction during partial ordering
(\mbox{\ref{temp.deduct.partial}}),
\mbox{\tcode{Q}} is defined as
- the ordered sequence consisting of only one element where S
+ containing only one element \mbox{\tcode{S}}, where \mbox{\tcode{S}}
is the set of concept map archetypes synthesized from the requirements
of the argument template
(\mbox{\ref{temp.func.order}},\mbox{\ref{temp.deduct.partial}}).}
@@ -5489,7 +5496,7 @@
requirements are implied from:}
\begin{itemize}
\additemConcepts{the type of a constrained function template,}
-\additemConcepts{the types named by an
+\remitemCCC{the types named by an
\mbox{\techterm{exception-specification}} (if any) of a constrained
function template,}
\additemConcepts{the template arguments of a constrained class template partial
@@ -5662,25 +5669,28 @@
reasoning within the translation process. \mbox{\exitnote}}
\pnum
-\addedCC{A type archetype that has been \mbox{\techterm{established}} has
- been synthesized to describe a set of types made equivalent via
- same-type constraints. If a same-type requirement attempts to make
- two types equivalent that both have established archetypes but do
- not have the same archetype, the program is ill-formed.
+\addedCC{An archetype does not exist until it is
+ \mbox{\techterm{established}}.
An archetype becomes established under the
following circumstances:}
\begin{itemize}
- \additemCC{a type that has the archetype has been used in the
+ \additemCC{a type that aliases the archetype has been used in the
template argument list of a class template specialization or
concept instance whose definition is required,}
-\additemCC{a type that has the archetype is provided as an argument to a
+\additemCC{a type that aliases the archetype is provided as an argument to a
\mbox{\tcode{sizeof}} or \mbox{\tcode{alignof}} expression
(\mbox{\ref{expr.sizeof}}, \mbox{\ref{expr.alignof}}),}
-\additemCC{at the end of a function declaration in which one or more
- parameters use a type that has the archetype, or}
+\additemCC{at the end of the function declarator in a function
+ declaration in which one or more
+ parameters use a type that aliases the archetype, or}
\additemCC{the archetype has been committed (described below).}
\end{itemize}
+\pnum
+\addedCC{If a same-type requirement attempts to make two types
+ equivalent that both alias established archetypes but do not alias the
+ same archetype, the program is ill-formed.}
+
\pnum
\addedCC{A type archetype that has been \mbox{\techterm{committed}} has
been defined as described below. Once an archetype has been
@@ -5691,10 +5701,19 @@
\begin{itemize}
\additemCC{the definition of the archetype is required, or}
\additemCC{name lookup finds an associated function with a parameter that uses
- a type that has the archetype.}
+ a type that aliases the archetype.}
\end{itemize}
\pnum
+\addedCC{In the declaration of a constrained member, member
+ template, or nested class, archetypes are established and committed
+ as if it were the only member of its class. \mbox{\enternote} This
+ means that members that come before the constrained member, member
+ template, or nested class cannot prevent the expression of
+ additional requirements on template parameters from enclosing
+ scopes. \mbox{\exitnote}}
+
+\pnum
\addedConcepts{An archetype \mbox{\tcode{T$'$}} for a type
\mbox{\tcode{T}} is}
\begin{itemize}
@@ -5941,7 +5960,7 @@
a \mbox{\techterm{concept map archetype}} for that
requirement is synthesized by
substituting the archetype of \mbox{\tcode{T}} for each occurrence of
-\mbox{\tcode{T}} within the concept arguments of the requirement. The
+\mbox{\tcode{T}} within the template arguments of the requirement. The
concept map archetype acts as a concept
map, and is used to resolve name
lookup into
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk