tmp/tmpqjyah75i/{from.md → to.md}
RENAMED
|
@@ -3,13 +3,13 @@
|
|
| 3 |
Two *template-id*s are the same if
|
| 4 |
|
| 5 |
- their *template-name*s, *operator-function-id*s, or
|
| 6 |
*literal-operator-id*s refer to the same template, and
|
| 7 |
- their corresponding type *template-argument*s are the same type, and
|
| 8 |
-
-
|
| 9 |
-
template
|
| 10 |
-
|
| 11 |
- their corresponding template *template-argument*s refer to the same
|
| 12 |
template.
|
| 13 |
|
| 14 |
Two *template-id*s that are the same refer to the same class, function,
|
| 15 |
or variable.
|
|
@@ -18,21 +18,24 @@ Two values are *template-argument-equivalent* if they are of the same
|
|
| 18 |
type and
|
| 19 |
|
| 20 |
- they are of integral type and their values are the same, or
|
| 21 |
- they are of floating-point type and their values are identical, or
|
| 22 |
- they are of type `std::nullptr_t`, or
|
| 23 |
-
- they are of
|
|
|
|
|
|
|
| 24 |
- they are of pointer type and they have the same pointer value, or
|
| 25 |
- they are of pointer-to-member type and they refer to the same class
|
| 26 |
member or are both the null member pointer value, or
|
| 27 |
- they are of reference type and they refer to the same object or
|
| 28 |
function, or
|
| 29 |
- they are of array type and their corresponding elements are
|
| 30 |
-
template-argument-equivalent,[^
|
| 31 |
- they are of union type and either they both have no active member or
|
| 32 |
they have the same active member and their active members are
|
| 33 |
template-argument-equivalent, or
|
|
|
|
| 34 |
- they are of class type and their corresponding direct subobjects and
|
| 35 |
reference members are template-argument-equivalent.
|
| 36 |
|
| 37 |
[*Example 1*:
|
| 38 |
|
|
@@ -73,5 +76,14 @@ the same type only if their *expression*s are equivalent
|
|
| 73 |
[[temp.over.link]].
|
| 74 |
|
| 75 |
[*Note 1*: However, such a type might be aliased, e.g., by a
|
| 76 |
*typedef-name*. — *end note*]
|
| 77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
Two *template-id*s are the same if
|
| 4 |
|
| 5 |
- their *template-name*s, *operator-function-id*s, or
|
| 6 |
*literal-operator-id*s refer to the same template, and
|
| 7 |
- their corresponding type *template-argument*s are the same type, and
|
| 8 |
+
- the template parameter values determined by their corresponding
|
| 9 |
+
constant template arguments [[temp.arg.nontype]] are
|
| 10 |
+
template-argument-equivalent (see below), and
|
| 11 |
- their corresponding template *template-argument*s refer to the same
|
| 12 |
template.
|
| 13 |
|
| 14 |
Two *template-id*s that are the same refer to the same class, function,
|
| 15 |
or variable.
|
|
|
|
| 18 |
type and
|
| 19 |
|
| 20 |
- they are of integral type and their values are the same, or
|
| 21 |
- they are of floating-point type and their values are identical, or
|
| 22 |
- they are of type `std::nullptr_t`, or
|
| 23 |
+
- they are of type `std::meta::info` and their values compare equal
|
| 24 |
+
[[expr.eq]], or
|
| 25 |
+
- they are of enumeration type and their values are the same,[^5] or
|
| 26 |
- they are of pointer type and they have the same pointer value, or
|
| 27 |
- they are of pointer-to-member type and they refer to the same class
|
| 28 |
member or are both the null member pointer value, or
|
| 29 |
- they are of reference type and they refer to the same object or
|
| 30 |
function, or
|
| 31 |
- they are of array type and their corresponding elements are
|
| 32 |
+
template-argument-equivalent,[^6] or
|
| 33 |
- they are of union type and either they both have no active member or
|
| 34 |
they have the same active member and their active members are
|
| 35 |
template-argument-equivalent, or
|
| 36 |
+
- they are of a closure type [[expr.prim.lambda.closure]], or
|
| 37 |
- they are of class type and their corresponding direct subobjects and
|
| 38 |
reference members are template-argument-equivalent.
|
| 39 |
|
| 40 |
[*Example 1*:
|
| 41 |
|
|
|
|
| 76 |
[[temp.over.link]].
|
| 77 |
|
| 78 |
[*Note 1*: However, such a type might be aliased, e.g., by a
|
| 79 |
*typedef-name*. — *end note*]
|
| 80 |
|
| 81 |
+
For a type template parameter pack `T`, `T...[`*constant-expression*`]`
|
| 82 |
+
denotes a unique dependent type.
|
| 83 |
+
|
| 84 |
+
If the *constant-expression* of a *pack-index-specifier* is
|
| 85 |
+
value-dependent, two such *pack-index-specifier*s refer to the same type
|
| 86 |
+
only if their *constant-expression*s are equivalent [[temp.over.link]].
|
| 87 |
+
Otherwise, two such *pack-index-specifier*s refer to the same type only
|
| 88 |
+
if their indexes have the same value.
|
| 89 |
+
|