@@ -434,6 +434,114 @@ __datasizeof
434
434
``__datasizeof `` behaves like ``sizeof ``, except that it returns the size of the
435
435
type ignoring tail padding.
436
436
437
+ _BitInt, _ExtInt
438
+ ----------------
439
+
440
+ Clang supports the C23 ``_BitInt(N) `` feature as an extension in older C modes
441
+ and in C++. This type was previously implemented in Clang with the same
442
+ semantics, but spelled ``_ExtInt(N) ``. This spelling has been deprecated in
443
+ favor of the standard type.
444
+
445
+ Note: the ABI for ``_BitInt(N) `` is still in the process of being stabilized,
446
+ so this type should not yet be used in interfaces that require ABI stability.
447
+
448
+ C keywords supported in all language modes
449
+ ------------------------------------------
450
+
451
+ Clang supports ``_Alignas ``, ``_Alignof ``, ``_Atomic ``, ``_Complex ``,
452
+ ``_Generic ``, ``_Imaginary ``, ``_Noreturn ``, ``_Static_assert ``,
453
+ ``_Thread_local ``, and ``_Float16 `` in all language modes with the C semantics.
454
+
455
+ __alignof, __alignof__
456
+ ----------------------
457
+
458
+ ``__alignof `` and ``__alignof__ `` return, in contrast to ``_Alignof `` and
459
+ ``alignof ``, the preferred alignment of a type. This may be larger than the
460
+ required alignment for improved performance.
461
+
462
+ __extension__
463
+ -------------
464
+
465
+ ``__extension__ `` suppresses extension diagnostics in the statement it is
466
+ prepended to.
467
+
468
+ __auto_type
469
+ -----------
470
+
471
+ ``__auto_type `` behaves the same as ``auto `` in C++11 but is available in all
472
+ language modes.
473
+
474
+ __imag, __imag__
475
+ ----------------
476
+
477
+ ``__imag `` and ``__imag__ `` can be used to get the imaginary part of a complex
478
+ value.
479
+
480
+ __real, __real__
481
+ ----------------
482
+
483
+ ``__real `` and ``__real__ `` can be used to get the real part of a complex value.
484
+
485
+ __asm, __asm__
486
+ --------------
487
+
488
+ ``__asm `` and ``__asm__ `` are alternate spellings for ``asm ``, but available in
489
+ all language modes.
490
+
491
+ __complex, __complex__
492
+ ----------------------
493
+
494
+ ``__complex `` and ``__complex__ `` are alternate spellings for ``_Complex ``.
495
+
496
+ __const, __const__, __volatile, __volatile__, __restrict, __restrict__
497
+ ----------------------------------------------------------------------
498
+
499
+ These are alternate spellings for their non-underscore counterparts, but are
500
+ available in all langauge modes.
501
+
502
+ __decltype
503
+ ----------
504
+
505
+ ``__decltype `` is an alternate spelling for ``decltype ``, but is also available
506
+ in C++ modes before C++11.
507
+
508
+ __inline, __inline__
509
+ --------------------
510
+
511
+ ``__inline `` and ``__inline__ `` are alternate spellings for ``inline ``, but are
512
+ available in all language modes.
513
+
514
+ __nullptr
515
+ ---------
516
+
517
+ ``__nullptr `` is an alternate spelling for ``nullptr ``, but is also available in
518
+ C++ modes prior to C++11. Note that it's currently not availbale in C despite
519
+ C23 having support for ``nullptr ``.
520
+
521
+ __signed, __signed__
522
+ --------------------
523
+
524
+ ``__signed `` and ``__signed__ `` are alternate spellings for ``signed ``.
525
+ ``__unsigned `` and ``__unsigned__ `` are **not ** supported.
526
+
527
+ __typeof, __typeof__, __typeof_unqual, __typeof_unqual__
528
+ --------------------------------------------------------
529
+
530
+ ``__typeof `` and ``__typeof__ `` are alternate spellings for ``typeof ``, but are
531
+ available in all langauge modes. These spellings result in the operand,
532
+ retaining all qualifiers.
533
+
534
+ ``__typeof_unqual `` and ``__typeof_unqual__ `` are alternate spellings for the
535
+ C23 ``typeof_unqual `` type specifier, but are available in all language modes.
536
+ These spellings result in the type of the operand, stripping all qualifiers.
537
+
538
+ __char16_t, __char32_t
539
+ ----------------------
540
+
541
+ ``__char16_t `` and ``__char32_t `` are alternate spellings for ``char16_t `` and
542
+ ``char32_t `` respectively, but are also available in C++ modes before C++11.
543
+ They are only supported in C++. ``__char8_t `` is not available.
544
+
437
545
..
438
546
FIXME: This should list all the keyword extensions
439
547
@@ -5785,17 +5893,6 @@ Examples are:
5785
5893
# 60 "" 2 // return to "main.c"
5786
5894
# 1 "/usr/ancient/header.h" 1 4 // Enter an implicit extern "C" header
5787
5895
5788
- Extended Integer Types
5789
- ======================
5790
-
5791
- Clang supports the C23 ``_BitInt(N) `` feature as an extension in older C modes
5792
- and in C++. This type was previously implemented in Clang with the same
5793
- semantics, but spelled ``_ExtInt(N) ``. This spelling has been deprecated in
5794
- favor of the standard type.
5795
-
5796
- Note: the ABI for ``_BitInt(N) `` is still in the process of being stabilized,
5797
- so this type should not yet be used in interfaces that require ABI stability.
5798
-
5799
5896
Intrinsics Support within Constant Expressions
5800
5897
==============================================
5801
5898
0 commit comments