|
116 | 116 | In a function template declaration, the \grammarterm{unqualified-id} of the
|
117 | 117 | \grammarterm{declarator-id} shall be a name.
|
118 | 118 | \begin{note}
|
119 |
| -In a class template declaration, if the \grammarterm{class-name} |
120 |
| -is a |
121 |
| -\grammarterm{simple-template-id}, |
122 |
| -the declaration declares a partial specialization\iref{temp.spec.partial}. |
| 119 | +A class or variable template declaration of a \grammarterm{simple-template-id} |
| 120 | +declares a partial specialization\iref{temp.spec.partial}. |
123 | 121 | \end{note}
|
124 | 122 |
|
125 | 123 | \pnum
|
|
135 | 133 | \indextext{template name!linkage of}%
|
136 | 134 | A specialization (explicit or implicit) of one template is
|
137 | 135 | distinct from all specializations of any other template.
|
138 |
| -A template, a template explicit specialization\iref{temp.expl.spec}, and a class |
139 |
| -template partial specialization shall not have C language linkage. |
| 136 | +A template, an explicit specialization\iref{temp.expl.spec}, and a |
| 137 | +partial specialization shall not have C language linkage. |
140 | 138 | \begin{note}
|
141 | 139 | Default arguments for function templates and for member functions of
|
142 | 140 | class templates are considered definitions for the purpose of template
|
|
2152 | 2150 |
|
2153 | 2151 | \rSec2[temp.decls.general]{General}
|
2154 | 2152 |
|
| 2153 | +\pnum |
| 2154 | +The template parameters of a template are specified in |
| 2155 | +the angle bracket enclosed list |
| 2156 | +that immediately follows the keyword \keyword{template}. |
| 2157 | + |
2155 | 2158 | \pnum
|
2156 | 2159 | A \defnadj{primary}{template} declaration is one
|
2157 | 2160 | in which the name of the template is not followed by
|
|
2160 | 2163 | the template argument list of its \grammarterm{template-head}\iref{temp.arg}.
|
2161 | 2164 | A template declaration in which the name of the template is followed by
|
2162 | 2165 | a \grammarterm{template-argument-list} is
|
2163 |
| -a partial specialization of |
2164 |
| -the template named in the declaration\iref{temp.spec.partial}. |
| 2166 | +a partial specialization\iref{temp.spec.partial} of |
| 2167 | +the template named in the declaration, |
| 2168 | +which shall be a class or variable template. |
2165 | 2169 |
|
2166 | 2170 | \pnum
|
2167 | 2171 | For purposes of name lookup and instantiation,
|
|
3129 | 3133 |
|
3130 | 3134 | \pnum
|
3131 | 3135 | \indextext{specialization!class template partial}%
|
3132 |
| -A partial specialization of a class template provides an alternative definition |
| 3136 | +A partial specialization of a template provides an alternative definition |
3133 | 3137 | of the template that is used instead of the primary definition when the
|
3134 | 3138 | arguments in a specialization match those given in the partial
|
3135 | 3139 | specialization\iref{temp.spec.partial.match}.
|
3136 |
| -A declaration of the primary template shall precede any specialization of |
| 3140 | +A declaration of the primary template shall precede |
| 3141 | +any partial specialization of |
3137 | 3142 | that template.
|
3138 |
| -A partial specialization shall be reachable from any use of a class template |
| 3143 | +A partial specialization shall be reachable from any use of a template |
3139 | 3144 | specialization that would make use of the partial specialization as the result of
|
3140 | 3145 | an implicit or explicit instantiation; no diagnostic is required.
|
3141 | 3146 |
|
3142 | 3147 | \pnum
|
3143 | 3148 | Two partial specialization declarations declare the same entity
|
3144 | 3149 | if they are partial specializations of the same template and have equivalent
|
3145 | 3150 | \grammarterm{template-head}s and template argument lists\iref{temp.over.link}.
|
3146 |
| -Each class template partial specialization is a distinct template and |
3147 |
| -definitions shall be provided for the members of a template partial |
3148 |
| -specialization\iref{temp.class.spec.mfunc}. |
| 3151 | +Each partial specialization is a distinct template. |
3149 | 3152 |
|
3150 | 3153 | \pnum
|
3151 | 3154 | \begin{example}
|
|
3181 | 3184 | \end{example}
|
3182 | 3185 |
|
3183 | 3186 | \pnum
|
3184 |
| -The template parameters are specified in the angle bracket enclosed list |
3185 |
| -that immediately follows the keyword \keyword{template}. |
3186 | 3187 | The template argument list of a partial specialization is
|
3187 |
| -the \grammarterm{template-argument-list} of the \grammarterm{class-name}. |
| 3188 | +the \grammarterm{template-argument-list} following the name of the template. |
3188 | 3189 |
|
3189 | 3190 | \pnum
|
3190 | 3191 | A partial specialization may be declared in any
|
|
3452 | 3453 | \rSec3[temp.spec.partial.member]{Members of class template partial specializations}
|
3453 | 3454 |
|
3454 | 3455 | \pnum
|
3455 |
| -A class template partial specialization is a distinct template. |
3456 | 3456 | The members of the class template partial specialization are
|
3457 | 3457 | unrelated to the members of the primary template.
|
3458 | 3458 | Class template partial specialization members that are used in a way that
|
|
4789 | 4789 | the name of the nested class referenced as a member of the
|
4790 | 4790 | current instantiation, or
|
4791 | 4791 | \item
|
4792 |
| -in the definition of a partial specialization |
4793 |
| -or a member of a partial specialization, the name of |
| 4792 | +in the definition of a class template partial specialization |
| 4793 | +or a member of a class template partial specialization, the name of |
4794 | 4794 | the class template followed by a template argument list
|
4795 | 4795 | equivalent to that of the partial specialization\iref{temp.spec.partial}
|
4796 | 4796 | enclosed in \tcode{<>} (or an equivalent template alias specialization).
|
|
0 commit comments