From Jason Turner

[gram.dcl]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpmbisw0j2/{from.md → to.md} +86 -53
tmp/tmpmbisw0j2/{from.md → to.md} RENAMED
@@ -7,12 +7,14 @@ declaration-seq:
7
  ```
8
 
9
  ``` bnf
10
  declaration:
11
  block-declaration
 
12
  function-definition
13
  template-declaration
 
14
  explicit-instantiation
15
  explicit-specialization
16
  linkage-specification
17
  namespace-definition
18
  empty-declaration
@@ -29,19 +31,25 @@ block-declaration:
29
  static_assert-declaration
30
  alias-declaration
31
  opaque-enum-declaration
32
  ```
33
 
 
 
 
 
 
34
  ``` bnf
35
  alias-declaration:
36
- 'using' identifier attribute-specifier-seqₒₚₜ '=' type-id ';'
37
  ```
38
 
39
  ``` bnf
40
  simple-declaration:
41
- decl-specifier-seqₒₚₜ init-declarator-listₒₚₜ ';'
42
- attribute-specifier-seq decl-specifier-seqₒₚₜ init-declarator-list ';'
 
43
  ```
44
 
45
  ``` bnf
46
  empty-declaration:
47
  ';'
@@ -53,35 +61,34 @@ attribute-declaration:
53
  ```
54
 
55
  ``` bnf
56
  decl-specifier:
57
  storage-class-specifier
58
- type-specifier
59
  function-specifier
60
  'friend'
61
  'typedef'
62
  'constexpr'
 
63
  ```
64
 
65
  ``` bnf
66
  decl-specifier-seq:
67
  decl-specifier attribute-specifier-seqₒₚₜ
68
  decl-specifier decl-specifier-seq
69
  ```
70
 
71
  ``` bnf
72
  storage-class-specifier:
73
- 'register'
74
  'static'
75
  'thread_local'
76
  'extern'
77
  'mutable'
78
  ```
79
 
80
  ``` bnf
81
  function-specifier:
82
- 'inline'
83
  'virtual'
84
  'explicit'
85
  ```
86
 
87
  ``` bnf
@@ -89,17 +96,10 @@ typedef-name:
89
  identifier
90
  ```
91
 
92
  ``` bnf
93
  type-specifier:
94
- trailing-type-specifier
95
- class-specifier
96
- enum-specifier
97
- ```
98
-
99
- ``` bnf
100
- trailing-type-specifier:
101
  simple-type-specifier
102
  elaborated-type-specifier
103
  typename-specifier
104
  cv-qualifier
105
  ```
@@ -109,19 +109,27 @@ type-specifier-seq:
109
  type-specifier attribute-specifier-seqₒₚₜ
110
  type-specifier type-specifier-seq
111
  ```
112
 
113
  ``` bnf
114
- trailing-type-specifier-seq:
115
- trailing-type-specifier attribute-specifier-seqₒₚₜ
116
- trailing-type-specifier trailing-type-specifier-seq
 
 
 
 
 
 
 
117
  ```
118
 
119
  ``` bnf
120
  simple-type-specifier:
121
  nested-name-specifierₒₚₜ type-name
122
  nested-name-specifier 'template' simple-template-id
 
123
  'char'
124
  'char16_t'
125
  'char32_t'
126
  'wchar_t'
127
  'bool'
@@ -170,18 +178,21 @@ enum-specifier:
170
  enum-head '{' enumerator-list ', }'
171
  ```
172
 
173
  ``` bnf
174
  enum-head:
175
- enum-key attribute-specifier-seqₒₚₜ identifierₒₚₜ enum-baseₒₚₜ
176
- enum-key attribute-specifier-seqₒₚₜ nested-name-specifier identifier
177
- enum-baseₒₚₜ
 
 
 
178
  ```
179
 
180
  ``` bnf
181
  opaque-enum-declaration:
182
- enum-key attribute-specifier-seqₒₚₜ identifier enum-baseₒₚₜ ';'
183
  ```
184
 
185
  ``` bnf
186
  enum-key:
187
  'enum'
@@ -206,49 +217,45 @@ enumerator-definition:
206
  enumerator '=' constant-expression
207
  ```
208
 
209
  ``` bnf
210
  enumerator:
211
- identifier
212
  ```
213
 
214
  ``` bnf
215
  namespace-name:
216
- original-namespace-name
217
  namespace-alias
218
  ```
219
 
220
- ``` bnf
221
- original-namespace-name:
222
- identifier
223
- ```
224
-
225
  ``` bnf
226
  namespace-definition:
227
  named-namespace-definition
228
  unnamed-namespace-definition
 
229
  ```
230
 
231
  ``` bnf
232
  named-namespace-definition:
233
- original-namespace-definition
234
- extension-namespace-definition
235
- ```
236
-
237
- ``` bnf
238
- original-namespace-definition:
239
- 'inline'ₒₚₜ 'namespace' identifier '{' namespace-body '}'
240
- ```
241
-
242
- ``` bnf
243
- extension-namespace-definition:
244
- 'inline'ₒₚₜ 'namespace' original-namespace-name '{' namespace-body '}'
245
  ```
246
 
247
  ``` bnf
248
  unnamed-namespace-definition:
249
- 'inline'ₒₚₜ 'namespace {' namespace-body '}'
 
 
 
 
 
 
 
 
 
 
 
250
  ```
251
 
252
  ``` bnf
253
  namespace-body:
254
  declaration-seqₒₚₜ
@@ -269,22 +276,32 @@ qualified-namespace-specifier:
269
  nested-name-specifierₒₚₜ namespace-name
270
  ```
271
 
272
  ``` bnf
273
  using-declaration:
274
- 'using typename'ₒₚₜ nested-name-specifier unqualified-id ';'
275
- 'using ::' unqualified-id ';'
 
 
 
 
 
 
 
 
 
 
276
  ```
277
 
278
  ``` bnf
279
  using-directive:
280
  attribute-specifier-seqₒₚₜ 'using namespace' nested-name-specifierₒₚₜ namespace-name ';'
281
  ```
282
 
283
  ``` bnf
284
  asm-definition:
285
- 'asm (' string-literal ') ;'
286
  ```
287
 
288
  ``` bnf
289
  linkage-specification:
290
  'extern' string-literal '{' declaration-seqₒₚₜ '}'
@@ -296,20 +313,25 @@ attribute-specifier-seq:
296
  attribute-specifier-seqₒₚₜ attribute-specifier
297
  ```
298
 
299
  ``` bnf
300
  attribute-specifier:
301
- '[' '[' attribute-list ']' ']'
302
  alignment-specifier
303
  ```
304
 
305
  ``` bnf
306
  alignment-specifier:
307
  'alignas (' type-id '...'ₒₚₜ ')'
308
  'alignas (' constant-expression '...'ₒₚₜ ')'
309
  ```
310
 
 
 
 
 
 
311
  ``` bnf
312
  attribute-list:
313
  attributeₒₚₜ
314
  attribute-list ',' attributeₒₚₜ
315
  attribute '...'
@@ -337,24 +359,24 @@ attribute-namespace:
337
  identifier
338
  ```
339
 
340
  ``` bnf
341
  attribute-argument-clause:
342
- '(' balanced-token-seq ')'
343
  ```
344
 
345
  ``` bnf
346
  balanced-token-seq:
347
- balanced-tokenₒₚₜ
348
  balanced-token-seq balanced-token
349
  ```
350
 
351
  ``` bnf
352
  balanced-token:
353
- '(' balanced-token-seq ')'
354
- '[' balanced-token-seq ']'
355
- '{' balanced-token-seq '}'
356
  any *token* other than a parenthesis, a bracket, or a brace
357
  ```
358
 
359
  ``` bnf
360
  init-declarator-list:
@@ -388,16 +410,16 @@ noptr-declarator:
388
  ```
389
 
390
  ``` bnf
391
  parameters-and-qualifiers:
392
  '(' parameter-declaration-clause ')' cv-qualifier-seqₒₚₜ
393
- ref-qualifierₒₚₜ exception-specificationₒₚₜ attribute-specifier-seqₒₚₜ
394
  ```
395
 
396
  ``` bnf
397
  trailing-return-type:
398
- '->' trailing-type-specifier-seq abstract-declaratorₒₚₜ
399
  ```
400
 
401
  ``` bnf
402
  ptr-operator:
403
  '*' attribute-specifier-seqₒₚₜ cv-qualifier-seqₒₚₜ
@@ -431,10 +453,15 @@ declarator-id:
431
  ``` bnf
432
  type-id:
433
  type-specifier-seq abstract-declaratorₒₚₜ
434
  ```
435
 
 
 
 
 
 
436
  ``` bnf
437
  abstract-declarator:
438
  ptr-abstract-declarator
439
  noptr-abstract-declaratorₒₚₜ parameters-and-qualifiers trailing-return-type
440
  abstract-pack-declarator
@@ -466,12 +493,12 @@ noptr-abstract-pack-declarator:
466
  '...'
467
  ```
468
 
469
  ``` bnf
470
  parameter-declaration-clause:
471
- parameter-declaration-listₒₚₜ ...ₒₚₜ
472
- parameter-declaration-list ',' ...
473
  ```
474
 
475
  ``` bnf
476
  parameter-declaration-list:
477
  parameter-declaration
@@ -527,6 +554,12 @@ initializer-list:
527
  braced-init-list:
528
  '{' initializer-list ','ₒₚₜ '}'
529
  '{' '}'
530
  ```
531
 
 
 
 
 
 
 
532
 
 
7
  ```
8
 
9
  ``` bnf
10
  declaration:
11
  block-declaration
12
+ nodeclspec-function-declaration
13
  function-definition
14
  template-declaration
15
+ deduction-guide
16
  explicit-instantiation
17
  explicit-specialization
18
  linkage-specification
19
  namespace-definition
20
  empty-declaration
 
31
  static_assert-declaration
32
  alias-declaration
33
  opaque-enum-declaration
34
  ```
35
 
36
+ ``` bnf
37
+ nodeclspec-function-declaration:
38
+ attribute-specifier-seqₒₚₜ declarator ';'
39
+ ```
40
+
41
  ``` bnf
42
  alias-declaration:
43
+ 'using' identifier attribute-specifier-seqₒₚₜ '=' defining-type-id ';'
44
  ```
45
 
46
  ``` bnf
47
  simple-declaration:
48
+ decl-specifier-seq init-declarator-listₒₚₜ ';'
49
+ attribute-specifier-seq decl-specifier-seq init-declarator-list ';'
50
+ attribute-specifier-seqₒₚₜ decl-specifier-seq ref-qualifierₒₚₜ '[' identifier-list ']' initializer ';'
51
  ```
52
 
53
  ``` bnf
54
  empty-declaration:
55
  ';'
 
61
  ```
62
 
63
  ``` bnf
64
  decl-specifier:
65
  storage-class-specifier
66
+ defining-type-specifier
67
  function-specifier
68
  'friend'
69
  'typedef'
70
  'constexpr'
71
+ 'inline'
72
  ```
73
 
74
  ``` bnf
75
  decl-specifier-seq:
76
  decl-specifier attribute-specifier-seqₒₚₜ
77
  decl-specifier decl-specifier-seq
78
  ```
79
 
80
  ``` bnf
81
  storage-class-specifier:
 
82
  'static'
83
  'thread_local'
84
  'extern'
85
  'mutable'
86
  ```
87
 
88
  ``` bnf
89
  function-specifier:
 
90
  'virtual'
91
  'explicit'
92
  ```
93
 
94
  ``` bnf
 
96
  identifier
97
  ```
98
 
99
  ``` bnf
100
  type-specifier:
 
 
 
 
 
 
 
101
  simple-type-specifier
102
  elaborated-type-specifier
103
  typename-specifier
104
  cv-qualifier
105
  ```
 
109
  type-specifier attribute-specifier-seqₒₚₜ
110
  type-specifier type-specifier-seq
111
  ```
112
 
113
  ``` bnf
114
+ defining-type-specifier:
115
+ type-specifier
116
+ class-specifier
117
+ enum-specifier
118
+ ```
119
+
120
+ ``` bnf
121
+ defining-type-specifier-seq:
122
+ defining-type-specifier attribute-specifier-seqₒₚₜ
123
+ defining-type-specifier defining-type-specifier-seq
124
  ```
125
 
126
  ``` bnf
127
  simple-type-specifier:
128
  nested-name-specifierₒₚₜ type-name
129
  nested-name-specifier 'template' simple-template-id
130
+ nested-name-specifierₒₚₜ template-name
131
  'char'
132
  'char16_t'
133
  'char32_t'
134
  'wchar_t'
135
  'bool'
 
178
  enum-head '{' enumerator-list ', }'
179
  ```
180
 
181
  ``` bnf
182
  enum-head:
183
+ enum-key attribute-specifier-seqₒₚₜ enum-head-nameₒₚₜ enum-baseₒₚₜ
184
+ ```
185
+
186
+ ``` bnf
187
+ enum-head-name:
188
+ nested-name-specifierₒₚₜ identifier
189
  ```
190
 
191
  ``` bnf
192
  opaque-enum-declaration:
193
+ enum-key attribute-specifier-seqₒₚₜ nested-name-specifierₒₚₜ identifier enum-baseₒₚₜ ';'
194
  ```
195
 
196
  ``` bnf
197
  enum-key:
198
  'enum'
 
217
  enumerator '=' constant-expression
218
  ```
219
 
220
  ``` bnf
221
  enumerator:
222
+ identifier attribute-specifier-seqₒₚₜ
223
  ```
224
 
225
  ``` bnf
226
  namespace-name:
227
+ identifier
228
  namespace-alias
229
  ```
230
 
 
 
 
 
 
231
  ``` bnf
232
  namespace-definition:
233
  named-namespace-definition
234
  unnamed-namespace-definition
235
+ nested-namespace-definition
236
  ```
237
 
238
  ``` bnf
239
  named-namespace-definition:
240
+ 'inline'ₒₚₜ 'namespace' attribute-specifier-seqₒₚₜ identifier '{' namespace-body '}'
 
 
 
 
 
 
 
 
 
 
 
241
  ```
242
 
243
  ``` bnf
244
  unnamed-namespace-definition:
245
+ 'inline'ₒₚₜ 'namespace' attribute-specifier-seqₒₚₜ '{' namespace-body '}'
246
+ ```
247
+
248
+ ``` bnf
249
+ nested-namespace-definition:
250
+ 'namespace' enclosing-namespace-specifier '::' identifier '{' namespace-body '}'
251
+ ```
252
+
253
+ ``` bnf
254
+ enclosing-namespace-specifier:
255
+ identifier
256
+ enclosing-namespace-specifier '::' identifier
257
  ```
258
 
259
  ``` bnf
260
  namespace-body:
261
  declaration-seqₒₚₜ
 
276
  nested-name-specifierₒₚₜ namespace-name
277
  ```
278
 
279
  ``` bnf
280
  using-declaration:
281
+ 'using' using-declarator-list ';'
282
+ ```
283
+
284
+ ``` bnf
285
+ using-declarator-list:
286
+ using-declarator '...'ₒₚₜ
287
+ using-declarator-list ',' using-declarator '...'ₒₚₜ
288
+ ```
289
+
290
+ ``` bnf
291
+ using-declarator:
292
+ 'typename'ₒₚₜ nested-name-specifier unqualified-id
293
  ```
294
 
295
  ``` bnf
296
  using-directive:
297
  attribute-specifier-seqₒₚₜ 'using namespace' nested-name-specifierₒₚₜ namespace-name ';'
298
  ```
299
 
300
  ``` bnf
301
  asm-definition:
302
+ attribute-specifier-seqₒₚₜ 'asm (' string-literal ') ;'
303
  ```
304
 
305
  ``` bnf
306
  linkage-specification:
307
  'extern' string-literal '{' declaration-seqₒₚₜ '}'
 
313
  attribute-specifier-seqₒₚₜ attribute-specifier
314
  ```
315
 
316
  ``` bnf
317
  attribute-specifier:
318
+ '[' '[' attribute-using-prefixₒₚₜ attribute-list ']' ']'
319
  alignment-specifier
320
  ```
321
 
322
  ``` bnf
323
  alignment-specifier:
324
  'alignas (' type-id '...'ₒₚₜ ')'
325
  'alignas (' constant-expression '...'ₒₚₜ ')'
326
  ```
327
 
328
+ ``` bnf
329
+ attribute-using-prefix:
330
+ 'using' attribute-namespace ':'
331
+ ```
332
+
333
  ``` bnf
334
  attribute-list:
335
  attributeₒₚₜ
336
  attribute-list ',' attributeₒₚₜ
337
  attribute '...'
 
359
  identifier
360
  ```
361
 
362
  ``` bnf
363
  attribute-argument-clause:
364
+ '(' balanced-token-seqₒₚₜ ')'
365
  ```
366
 
367
  ``` bnf
368
  balanced-token-seq:
369
+ balanced-token
370
  balanced-token-seq balanced-token
371
  ```
372
 
373
  ``` bnf
374
  balanced-token:
375
+ '(' balanced-token-seqₒₚₜ ')'
376
+ '[' balanced-token-seqₒₚₜ ']'
377
+ '{' balanced-token-seqₒₚₜ '}'
378
  any *token* other than a parenthesis, a bracket, or a brace
379
  ```
380
 
381
  ``` bnf
382
  init-declarator-list:
 
410
  ```
411
 
412
  ``` bnf
413
  parameters-and-qualifiers:
414
  '(' parameter-declaration-clause ')' cv-qualifier-seqₒₚₜ
415
+ ref-qualifierₒₚₜ noexcept-specifierₒₚₜ attribute-specifier-seqₒₚₜ
416
  ```
417
 
418
  ``` bnf
419
  trailing-return-type:
420
+ '->' type-id
421
  ```
422
 
423
  ``` bnf
424
  ptr-operator:
425
  '*' attribute-specifier-seqₒₚₜ cv-qualifier-seqₒₚₜ
 
453
  ``` bnf
454
  type-id:
455
  type-specifier-seq abstract-declaratorₒₚₜ
456
  ```
457
 
458
+ ``` bnf
459
+ defining-type-id:
460
+ defining-type-specifier-seq abstract-declaratorₒₚₜ
461
+ ```
462
+
463
  ``` bnf
464
  abstract-declarator:
465
  ptr-abstract-declarator
466
  noptr-abstract-declaratorₒₚₜ parameters-and-qualifiers trailing-return-type
467
  abstract-pack-declarator
 
493
  '...'
494
  ```
495
 
496
  ``` bnf
497
  parameter-declaration-clause:
498
+ parameter-declaration-listₒₚₜ '...'ₒₚₜ
499
+ parameter-declaration-list ', ...'
500
  ```
501
 
502
  ``` bnf
503
  parameter-declaration-list:
504
  parameter-declaration
 
554
  braced-init-list:
555
  '{' initializer-list ','ₒₚₜ '}'
556
  '{' '}'
557
  ```
558
 
559
+ ``` bnf
560
+ expr-or-braced-init-list:
561
+ expression
562
+ braced-init-list
563
+ ```
564
+
565