From Jason Turner

[namespace.std]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp996zaz49/{from.md → to.md} +25 -6
tmp/tmp996zaz49/{from.md → to.md} RENAMED
@@ -4,13 +4,16 @@ Unless otherwise specified, the behavior of a C++ program is undefined
4
  if it adds declarations or definitions to namespace `std` or to a
5
  namespace within namespace `std`.
6
 
7
  Unless explicitly prohibited, a program may add a template
8
  specialization for any standard library class template to namespace
9
- `std` provided that (a) the added declaration depends on at least one
10
- program-defined type and (b) the specialization meets the standard
11
- library requirements for the original template.[^21]
 
 
 
12
 
13
  The behavior of a C++ program is undefined if it declares an explicit or
14
  partial specialization of any standard library variable template, except
15
  where explicitly permitted by the specification of that variable
16
  template.
@@ -28,13 +31,15 @@ The behavior of a C++ program is undefined if it declares
28
  - an explicit or partial specialization of any member class template of
29
  a standard library class or class template, or
30
  - a deduction guide for any standard library class template.
31
 
32
  A program may explicitly instantiate a class template defined in the
33
- standard library only if the declaration (a) depends on the name of at
34
- least one program-defined type and (b) the instantiation meets the
35
- standard library requirements for the original template.
 
 
36
 
37
  Let `F` denote a standard library function [[global.functions]], a
38
  standard library static member function, or an instantiation of a
39
  standard library function template. Unless `F` is designated an
40
  *addressable function*, the behavior of a C++ program is unspecified
@@ -50,8 +55,22 @@ Moreover, the behavior of a C++ program is unspecified (possibly
50
  ill-formed) if it attempts to form a reference to `F` or if it attempts
51
  to form a pointer-to-member designating either a standard library
52
  non-static member function [[member.functions]] or an instantiation of a
53
  standard library member function template.
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  A translation unit shall not declare namespace `std` to be an inline
56
  namespace [[namespace.def]].
57
 
 
4
  if it adds declarations or definitions to namespace `std` or to a
5
  namespace within namespace `std`.
6
 
7
  Unless explicitly prohibited, a program may add a template
8
  specialization for any standard library class template to namespace
9
+ `std` provided that
10
+
11
+ - the added declaration depends on at least one program-defined type,
12
+ and
13
+ - the specialization meets the standard library requirements for the
14
+ original template.[^21]
15
 
16
  The behavior of a C++ program is undefined if it declares an explicit or
17
  partial specialization of any standard library variable template, except
18
  where explicitly permitted by the specification of that variable
19
  template.
 
31
  - an explicit or partial specialization of any member class template of
32
  a standard library class or class template, or
33
  - a deduction guide for any standard library class template.
34
 
35
  A program may explicitly instantiate a class template defined in the
36
+ standard library only if the declaration
37
+
38
+ - depends on the name of at least one program-defined type, and
39
+ - the instantiation meets the standard library requirements for the
40
+ original template.
41
 
42
  Let `F` denote a standard library function [[global.functions]], a
43
  standard library static member function, or an instantiation of a
44
  standard library function template. Unless `F` is designated an
45
  *addressable function*, the behavior of a C++ program is unspecified
 
55
  ill-formed) if it attempts to form a reference to `F` or if it attempts
56
  to form a pointer-to-member designating either a standard library
57
  non-static member function [[member.functions]] or an instantiation of a
58
  standard library member function template.
59
 
60
+ Let `F` denote a standard library function or function template. Unless
61
+ `F` is designated an addressable function, it is unspecified if or how a
62
+ reflection value designating the associated entity can be formed.
63
+
64
+ [*Note 3*: For example, it is possible that `std::meta::members_of`
65
+ will not return reflections of standard library functions that an
66
+ implementation handles through an extra-linguistic
67
+ mechanism. — *end note*]
68
+
69
+ Let `C` denote a standard library class or class template
70
+ specialization. It is unspecified if or how a reflection value can be
71
+ formed to any private member of `C`, or what the names of such members
72
+ may be.
73
+
74
  A translation unit shall not declare namespace `std` to be an inline
75
  namespace [[namespace.def]].
76