From Jason Turner

[depr.tuple]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpvsgcq6kq/{from.md → to.md} +12 -12
tmp/tmpvsgcq6kq/{from.md → to.md} RENAMED
@@ -2,41 +2,41 @@
2
 
3
  The header `<tuple>` has the following additions:
4
 
5
  ``` cpp
6
  namespace std {
7
- template<class T> class tuple_size<volatile T>;
8
- template<class T> class tuple_size<const volatile T>;
9
 
10
- template<size_t I, class T> class tuple_element<I, volatile T>;
11
- template<size_t I, class T> class tuple_element<I, const volatile T>;
12
  }
13
  ```
14
 
15
  ``` cpp
16
- template<class T> class tuple_size<volatile T>;
17
- template<class T> class tuple_size<const volatile T>;
18
  ```
19
 
20
  Let `TS` denote `tuple_size<T>` of the cv-unqualified type `T`. If the
21
  expression `TS::value` is well-formed when treated as an unevaluated
22
- operand, then specializations of each of the two templates meet the
23
- *Cpp17TransformationTrait* requirements with a base characteristic of
24
- `integral_constant<size_t, TS::value>`. Otherwise, they have no member
25
- `value`.
26
 
27
  Access checking is performed as if in a context unrelated to `TS` and
28
  `T`. Only the validity of the immediate context of the expression is
29
  considered.
30
 
31
  In addition to being available via inclusion of the `<tuple>` header,
32
  the two templates are available when any of the headers `<array>`,
33
  `<ranges>`, or `<utility>` are included.
34
 
35
  ``` cpp
36
- template<size_t I, class T> class tuple_element<I, volatile T>;
37
- template<size_t I, class T> class tuple_element<I, const volatile T>;
38
  ```
39
 
40
  Let `TE` denote `tuple_element_t<I, T>` of the cv-unqualified type `T`.
41
  Then specializations of each of the two templates meet the
42
  *Cpp17TransformationTrait* requirements with a member typedef `type`
 
2
 
3
  The header `<tuple>` has the following additions:
4
 
5
  ``` cpp
6
  namespace std {
7
+ template<class T> struct tuple_size<volatile T>;
8
+ template<class T> struct tuple_size<const volatile T>;
9
 
10
+ template<size_t I, class T> struct tuple_element<I, volatile T>;
11
+ template<size_t I, class T> struct tuple_element<I, const volatile T>;
12
  }
13
  ```
14
 
15
  ``` cpp
16
+ template<class T> struct tuple_size<volatile T>;
17
+ template<class T> struct tuple_size<const volatile T>;
18
  ```
19
 
20
  Let `TS` denote `tuple_size<T>` of the cv-unqualified type `T`. If the
21
  expression `TS::value` is well-formed when treated as an unevaluated
22
+ operand [[term.unevaluated.operand]], then specializations of each of
23
+ the two templates meet the *Cpp17TransformationTrait* requirements with
24
+ a base characteristic of `integral_constant<size_t, TS::value>`.
25
+ Otherwise, they have no member `value`.
26
 
27
  Access checking is performed as if in a context unrelated to `TS` and
28
  `T`. Only the validity of the immediate context of the expression is
29
  considered.
30
 
31
  In addition to being available via inclusion of the `<tuple>` header,
32
  the two templates are available when any of the headers `<array>`,
33
  `<ranges>`, or `<utility>` are included.
34
 
35
  ``` cpp
36
+ template<size_t I, class T> struct tuple_element<I, volatile T>;
37
+ template<size_t I, class T> struct tuple_element<I, const volatile T>;
38
  ```
39
 
40
  Let `TE` denote `tuple_element_t<I, T>` of the cv-unqualified type `T`.
41
  Then specializations of each of the two templates meet the
42
  *Cpp17TransformationTrait* requirements with a member typedef `type`