From Jason Turner

[meta.rqmts]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpxs6yy8yy/{from.md → to.md} +31 -17
tmp/tmpxs6yy8yy/{from.md → to.md} RENAMED
@@ -1,32 +1,46 @@
1
  ### Requirements <a id="meta.rqmts">[[meta.rqmts]]</a>
2
 
3
- A *UnaryTypeTrait* describes a property of a type. It shall be a class
4
- template that takes one template type argument and, optionally,
5
- additional arguments that help define the property being described. It
6
- shall be `DefaultConstructible`, `CopyConstructible`, and publicly and
7
  unambiguously derived, directly or indirectly, from its *base
8
  characteristic*, which is a specialization of the template
9
- `integral_constant` ([[meta.help]]), with the arguments to the template
10
  `integral_constant` determined by the requirements for the particular
11
  property being described. The member names of the base characteristic
12
  shall not be hidden and shall be unambiguously available in the
13
- `UnaryTypeTrait`.
14
 
15
- A *BinaryTypeTrait* describes a relationship between two types. It shall
16
- be a class template that takes two template type arguments and,
17
- optionally, additional arguments that help define the relationship being
18
- described. It shall be `DefaultConstructible`, `CopyConstructible`, and
19
  publicly and unambiguously derived, directly or indirectly, from its
20
  *base characteristic*, which is a specialization of the template
21
- `integral_constant` ([[meta.help]]), with the arguments to the template
22
  `integral_constant` determined by the requirements for the particular
23
  relationship being described. The member names of the base
24
  characteristic shall not be hidden and shall be unambiguously available
25
- in the `BinaryTypeTrait`.
26
 
27
- A *TransformationTrait* modifies a property of a type. It shall be a
28
- class template that takes one template type argument and, optionally,
29
- additional arguments that help define the modification. It shall define
30
- a publicly accessible nested type named `type`, which shall be a synonym
31
- for the modified type.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
 
1
  ### Requirements <a id="meta.rqmts">[[meta.rqmts]]</a>
2
 
3
+ A describes a property of a type. It shall be a class template that
4
+ takes one template type argument and, optionally, additional arguments
5
+ that help define the property being described. It shall be
6
+ *Cpp17DefaultConstructible*, *Cpp17CopyConstructible*, and publicly and
7
  unambiguously derived, directly or indirectly, from its *base
8
  characteristic*, which is a specialization of the template
9
+ `integral_constant` [[meta.help]], with the arguments to the template
10
  `integral_constant` determined by the requirements for the particular
11
  property being described. The member names of the base characteristic
12
  shall not be hidden and shall be unambiguously available in the
13
+ *Cpp17UnaryTypeTrait*.
14
 
15
+ A describes a relationship between two types. It shall be a class
16
+ template that takes two template type arguments and, optionally,
17
+ additional arguments that help define the relationship being described.
18
+ It shall be *Cpp17DefaultConstructible*, *Cpp17CopyConstructible*, and
19
  publicly and unambiguously derived, directly or indirectly, from its
20
  *base characteristic*, which is a specialization of the template
21
+ `integral_constant` [[meta.help]], with the arguments to the template
22
  `integral_constant` determined by the requirements for the particular
23
  relationship being described. The member names of the base
24
  characteristic shall not be hidden and shall be unambiguously available
25
+ in the *Cpp17BinaryTypeTrait*.
26
 
27
+ A modifies a property of a type. It shall be a class template that takes
28
+ one template type argument and, optionally, additional arguments that
29
+ help define the modification. It shall define a publicly accessible
30
+ nested type named `type`, which shall be a synonym for the modified
31
+ type.
32
+
33
+ Unless otherwise specified, the behavior of a program that adds
34
+ specializations for any of the templates specified in this subclause 
35
+ [[meta]] is undefined.
36
+
37
+ Unless otherwise specified, an incomplete type may be used to
38
+ instantiate a template specified in this subclause. The behavior of a
39
+ program is undefined if:
40
+
41
+ - an instantiation of a template specified in subclause  [[meta]]
42
+ directly or indirectly depends on an incompletely-defined object type
43
+ `T`, and
44
+ - that instantiation could yield a different result were `T`
45
+ hypothetically completed.
46