From Jason Turner

[basic.link]

Diff to HTML by rtfpessoa

tmp/tmprnkdfcg3/{from.md → to.md} RENAMED
@@ -24,13 +24,13 @@ introduced by a declaration in another scope:
24
  A name having namespace scope ([[basic.scope.namespace]]) has internal
25
  linkage if it is the name of
26
 
27
  - a variable, function or function template that is explicitly declared
28
  `static`; or,
29
- - a variable that is explicitly declared `const` or `constexpr` and
30
- neither explicitly declared `extern` nor previously declared to have
31
- external linkage; or
32
  - a data member of an anonymous union.
33
 
34
  An unnamed namespace or a namespace declared directly or indirectly
35
  within an unnamed namespace has internal linkage. All other namespaces
36
  have external linkage. A name having namespace scope that has not been
@@ -105,18 +105,18 @@ namespace X {
105
 
106
  void q() { /* ... */ } // some other, unrelated q
107
  ```
108
 
109
  Names not covered by these rules have no linkage. Moreover, except as
110
- noted, a name declared at block scope ([[basic.scope.local]]) has no
111
  linkage. A type is said to have linkage if and only if:
112
 
113
  - it is a class or enumeration type that is named (or has a name for
114
  linkage purposes ([[dcl.typedef]])) and the name has linkage; or
115
  - it is an unnamed class or enumeration member of a class with linkage;
116
  or
117
- - it is a specialization of a class template ([[temp]])[^9]; or
118
  - it is a fundamental type ([[basic.fundamental]]); or
119
  - it is a compound type ([[basic.compound]]) other than a class or
120
  enumeration, compounded exclusively from types that have linkage; or
121
  - it is a cv-qualified ([[basic.type.qualifier]]) version of a type
122
  that has linkage.
 
24
  A name having namespace scope ([[basic.scope.namespace]]) has internal
25
  linkage if it is the name of
26
 
27
  - a variable, function or function template that is explicitly declared
28
  `static`; or,
29
+ - a non-volatile variable that is explicitly declared `const` or
30
+ `constexpr` and neither explicitly declared `extern` nor previously
31
+ declared to have external linkage; or
32
  - a data member of an anonymous union.
33
 
34
  An unnamed namespace or a namespace declared directly or indirectly
35
  within an unnamed namespace has internal linkage. All other namespaces
36
  have external linkage. A name having namespace scope that has not been
 
105
 
106
  void q() { /* ... */ } // some other, unrelated q
107
  ```
108
 
109
  Names not covered by these rules have no linkage. Moreover, except as
110
+ noted, a name declared at block scope ([[basic.scope.block]]) has no
111
  linkage. A type is said to have linkage if and only if:
112
 
113
  - it is a class or enumeration type that is named (or has a name for
114
  linkage purposes ([[dcl.typedef]])) and the name has linkage; or
115
  - it is an unnamed class or enumeration member of a class with linkage;
116
  or
117
+ - it is a specialization of a class template (Clause  [[temp]])[^10]; or
118
  - it is a fundamental type ([[basic.fundamental]]); or
119
  - it is a compound type ([[basic.compound]]) other than a class or
120
  enumeration, compounded exclusively from types that have linkage; or
121
  - it is a cv-qualified ([[basic.type.qualifier]]) version of a type
122
  that has linkage.