|
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} |
| 119 | +In a class or variable template declaration, if the |
| 120 | +declared name |
120 | 121 | is a
|
121 | 122 | \grammarterm{simple-template-id},
|
122 | 123 | the declaration declares a partial specialization\iref{temp.spec.partial}.
|
|
135 | 136 | \indextext{template name!linkage of}%
|
136 | 137 | A specialization (explicit or implicit) of one template is
|
137 | 138 | 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. |
| 139 | +A template, an explicit specialization\iref{temp.expl.spec}, and a |
| 140 | +partial specialization shall not have C language linkage. |
140 | 141 | \begin{note}
|
141 | 142 | Default arguments for function templates and for member functions of
|
142 | 143 | class templates are considered definitions for the purpose of template
|
|
149 | 150 | name bound in the same scope\iref{basic.scope.scope}, except
|
150 | 151 | that a function template can share a name with non-template
|
151 | 152 | functions\iref{dcl.fct} and/or function templates\iref{temp.over}.
|
152 |
| -Specializations, including partial specializations\iref{temp.class.spec}, |
| 153 | +Specializations, including partial specializations\iref{temp.spec.partial}, |
153 | 154 | do not reintroduce or bind names.
|
154 | 155 | Their target scope is the target scope of the primary template,
|
155 | 156 | so all specializations of a template belong to the same scope as it does.
|
|
2162 | 2163 | a \grammarterm{template-argument-list} is
|
2163 | 2164 | a partial specialization of
|
2164 | 2165 | the template named in the declaration\iref{temp.class.spec}.
|
| 2166 | +\begin{note} |
| 2167 | +A \grammarterm{template-id} |
| 2168 | +cannot be the declared name of a primary template declaration. |
| 2169 | +However, this syntax is allowed in partial specializations\iref{temp.spec.partial}. |
| 2170 | +\end{note} |
2165 | 2171 |
|
2166 | 2172 | \pnum
|
2167 | 2173 | For purposes of name lookup and instantiation,
|
|
3129 | 3135 |
|
3130 | 3136 | \pnum
|
3131 | 3137 | \indextext{specialization!class template partial}%
|
3132 |
| -A partial specialization of a class template provides an alternative definition |
| 3138 | +A partial specialization of a template provides an alternative definition |
3133 | 3139 | of the template that is used instead of the primary definition when the
|
3134 | 3140 | arguments in a specialization match those given in the partial
|
3135 |
| -specialization\iref{temp.class.spec.match}. |
3136 |
| -A declaration of the primary template shall precede any specialization of |
| 3141 | +specialization\iref{temp.spec.partial.match}. |
| 3142 | +A declaration of the primary template shall precede any partial specialization of |
3137 | 3143 | that template.
|
3138 |
| -A partial specialization shall be reachable from any use of a class template |
| 3144 | +A partial specialization shall be reachable from any use of a template |
3139 | 3145 | specialization that would make use of the partial specialization as the result of
|
3140 | 3146 | an implicit or explicit instantiation; no diagnostic is required.
|
3141 | 3147 |
|
3142 | 3148 | \pnum
|
3143 | 3149 | Two partial specialization declarations declare the same entity
|
3144 | 3150 | if they are partial specializations of the same template and have equivalent
|
3145 | 3151 | \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}. |
| 3152 | +Each partial specialization is a distinct template. |
3149 | 3153 |
|
3150 | 3154 | \pnum
|
3151 | 3155 | \begin{example}
|
|
3181 | 3185 | \end{example}
|
3182 | 3186 |
|
3183 | 3187 | \pnum
|
3184 |
| -The template parameters are specified in the angle bracket enclosed list |
| 3188 | +The template parameters of a template are specified in the angle bracket enclosed list |
3185 | 3189 | that immediately follows the keyword \keyword{template}.
|
3186 | 3190 | The template argument list of a partial specialization is
|
3187 |
| -the \grammarterm{template-argument-list} of the \grammarterm{ class-name}. |
| 3191 | +the \grammarterm{template-argument-list} of the \grammarterm{class-name}. |
3188 | 3192 |
|
3189 | 3193 | \pnum
|
3190 | 3194 | A partial specialization may be declared in any
|
|
3452 | 3456 | \rSec3[temp.spec.partial.member]{Members of class template partial specializations}
|
3453 | 3457 |
|
3454 | 3458 | \pnum
|
3455 |
| -A class template partial specialization is a distinct template. |
3456 | 3459 | The members of the class template partial specialization are
|
3457 | 3460 | unrelated to the members of the primary template.
|
3458 | 3461 | Class template partial specialization members that are used in a way that
|
|
4789 | 4792 | the name of the nested class referenced as a member of the
|
4790 | 4793 | current instantiation, or
|
4791 | 4794 | \item
|
4792 |
| -in the definition of a partial specialization |
4793 |
| -or a member of a partial specialization, the name of |
| 4795 | +in the definition of a class template partial specialization |
| 4796 | +or a member of a class template partial specialization, the name of |
4794 | 4797 | the class template followed by a template argument list
|
4795 | 4798 | equivalent to that of the partial specialization\iref{temp.class.spec}
|
4796 | 4799 | enclosed in \tcode{<>} (or an equivalent template alias specialization).
|
|
0 commit comments