diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst --- a/clang/docs/LanguageExtensions.rst +++ b/clang/docs/LanguageExtensions.rst @@ -1398,6 +1398,9 @@ ``__X(...)`` has the same semantics and constraints as the corresponding ``std::X_t<...>`` or ``std::X_v<...>`` type trait. +* ``__add_lvalue_reference(type)`` (C++) +* ``__add_pointer(type)`` (C++) +* ``__add_rvalue_reference(type)`` (C++) * ``__array_rank(type)`` (Embarcadero): Returns the number of levels of array in the type ``type``: ``0`` if ``type`` is not an array type, and @@ -1409,6 +1412,7 @@ Returns whether a class can be passed in registers under the current ABI. This type can only be applied to unqualified class types. This is not a portable type trait. +* ``__decay(type)`` (C++) * ``__has_nothrow_assign`` (GNU, Microsoft, Embarcadero): Deprecated, use ``__is_nothrow_assignable`` instead. * ``__has_nothrow_move_assign`` (GNU, Microsoft): @@ -1517,12 +1521,23 @@ enumeration types if the underlying type was unsigned. * ``__is_void`` (C++, Embarcadero) * ``__is_volatile`` (C++, Embarcadero) +* ``__make_signed(type)`` (C++) +* ``__make_unsigned(type)`` (C++) * ``__reference_binds_to_temporary(T, U)`` (Clang): Determines whether a reference of type ``T`` bound to an expression of type ``U`` would bind to a materialized temporary object. If ``T`` is not a reference type the result is false. Note this trait will also return false when the initialization of ``T`` from ``U`` is ill-formed. -* ``__underlying_type`` (C++, GNU, Microsoft) +* ``__remove_all_extents(type)`` (C++) +* ``__remove_const(type)`` (C++) +* ``__remove_cv(type)`` (C++) +* ``__remove_cvref(type)`` (C++) +* ``__remove_extent(type)`` (C++) +* ``__remove_pointer(type)``(C++) +* ``__remove_reference(type)`` (C++) +* ``__remove_restrict(type)`` (C++) +* ``__remove_volatile(type)`` (C++) +* ``__underlying_type(type)`` (C++, GNU, Microsoft) In addition, the following expression traits are supported: