|
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