Boost logo

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