From Jason Turner

[temp.type]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpqjyah75i/{from.md → to.md} +17 -5
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
- - their corresponding non-type *template-argument*s are
9
- template-argument-equivalent (see below) after conversion to the type
10
- of the *template-parameter*, 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,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 enumeration type and their values are the same,[^6] or
 
 
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,[^7] or
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
+