* [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically @ 2024-03-02 0:22 Ken Matsui 2024-03-02 0:22 ` [PATCH 02/11] gcc/doc/extend.texi: Add documentation for __is_array Ken Matsui ` (23 more replies) 0 siblings, 24 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui This patch sorts built-in traits alphabetically for better codebase consistency and easier future integration of changes. gcc/ChangeLog: * doc/extend.texi (Type Traits): Sort built-in traits alphabetically. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 62 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index f679c81acf2..b13f9d6f934 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29499,15 +29499,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin -@defbuiltin{bool __has_nothrow_copy (@var{type})} -If @code{__has_trivial_copy (type)} is @code{true} then the trait is -@code{true}, else if @var{type} is a cv-qualified class or union type -with copy constructors that are known not to throw an exception then -the trait is @code{true}, else it is @code{false}. -Requires: @var{type} shall be a complete type, (possibly cv-qualified) -@code{void}, or an array of unknown bound. -@enddefbuiltin - @defbuiltin{bool __has_nothrow_constructor (@var{type})} If @code{__has_trivial_constructor (type)} is @code{true} then the trait is @code{true}, else if @var{type} is a cv class or union type (or array @@ -29517,6 +29508,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_nothrow_copy (@var{type})} +If @code{__has_trivial_copy (type)} is @code{true} then the trait is +@code{true}, else if @var{type} is a cv-qualified class or union type +with copy constructors that are known not to throw an exception then +the trait is @code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, (possibly cv-qualified) +@code{void}, or an array of unknown bound. +@enddefbuiltin + @defbuiltin{bool __has_trivial_assign (@var{type})} If @var{type} is @code{const}- qualified or is a reference type then the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is @@ -29527,15 +29527,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin -@defbuiltin{bool __has_trivial_copy (@var{type})} -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference -type then the trait is @code{true}, else if @var{type} is a cv class -or union type with a trivial copy constructor ([class.copy]) then the trait -is @code{true}, else it is @code{false}. Requires: @var{type} shall be -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown -bound. -@enddefbuiltin - @defbuiltin{bool __has_trivial_constructor (@var{type})} If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type (or array thereof) @@ -29545,6 +29536,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_trivial_copy (@var{type})} +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference +type then the trait is @code{true}, else if @var{type} is a cv class +or union type with a trivial copy constructor ([class.copy]) then the trait +is @code{true}, else it is @code{false}. Requires: @var{type} shall be +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown +bound. +@enddefbuiltin + @defbuiltin{bool __has_trivial_destructor (@var{type})} If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type then the trait is @code{true}, else if @var{type} is a cv class or union @@ -29560,6 +29560,13 @@ If @var{type} is a class type with a virtual destructor Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __integer_pack (@var{length})} +When used as the pattern of a pack expansion within a template +definition, expands to a template argument pack containing integers +from @code{0} to @code{@var{length}-1}. This is provided for +efficient implementation of @code{std::make_integer_sequence}. +@enddefbuiltin + @defbuiltin{bool __is_abstract (@var{type})} If @var{type} is an abstract class ([class.abstract]) then the trait is @code{true}, else it is @code{false}. @@ -29589,12 +29596,6 @@ If @var{type} is a cv-qualified class type, and not a union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin -@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. -@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} -@c If template arguments for @code{template} can be deduced from -@c @code{type} or obtained from default template arguments. -@c @enddefbuiltin - @defbuiltin{bool __is_empty (@var{type})} If @code{__is_class (type)} is @code{false} then the trait is @code{false}. Otherwise @var{type} is considered empty if and only if: @var{type} @@ -29617,6 +29618,12 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. +@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} +@c If template arguments for @code{template} can be deduced from +@c @code{type} or obtained from default template arguments. +@c @enddefbuiltin + @defbuiltin{bool __is_literal_type (@var{type})} If @var{type} is a literal type ([basic.types]) the trait is @code{true}, else it is @code{false}. @@ -29661,13 +29668,6 @@ The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). @enddefbuiltin -@defbuiltin{bool __integer_pack (@var{length})} -When used as the pattern of a pack expansion within a template -definition, expands to a template argument pack containing integers -from @code{0} to @code{@var{length}-1}. This is provided for -efficient implementation of @code{std::make_integer_sequence}. -@enddefbuiltin - @node C++ Concepts @section C++ Concepts -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 02/11] gcc/doc/extend.texi: Add documentation for __is_array 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 03/11] gcc/doc/extend.texi: Add documentation for __is_bounded_array Ken Matsui ` (22 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_array): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index b13f9d6f934..5aeb9bdd47a 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29579,6 +29579,11 @@ If @var{type} is an aggregate type ([dcl.init.aggr]) the trait is Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_array (@var{type})} +If @var{type} is an array type ([dcl.array]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_base_of (@var{base_type}, @var{derived_type})} If @var{base_type} is a base class of @var{derived_type} ([class.derived]) then the trait is @code{true}, otherwise it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 03/11] gcc/doc/extend.texi: Add documentation for __is_bounded_array 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui 2024-03-02 0:22 ` [PATCH 02/11] gcc/doc/extend.texi: Add documentation for __is_array Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 04/11] gcc/doc/extend.texi: Add documentation for __is_function Ken Matsui ` (21 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_bounded_array): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 5aeb9bdd47a..4c8c0631ca7 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29596,6 +29596,11 @@ type (disregarding cv-qualifiers), @var{derived_type} shall be a complete type. A diagnostic is produced if this requirement is not met. @enddefbuiltin +@defbuiltin{bool __is_bounded_array (@var{type})} +If @var{type} is an array type of known bound ([dcl.array]) +the trait is @code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_class (@var{type})} If @var{type} is a cv-qualified class type, and not a union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 04/11] gcc/doc/extend.texi: Add documentation for __is_function 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui 2024-03-02 0:22 ` [PATCH 02/11] gcc/doc/extend.texi: Add documentation for __is_array Ken Matsui 2024-03-02 0:22 ` [PATCH 03/11] gcc/doc/extend.texi: Add documentation for __is_bounded_array Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 05/11] gcc/doc/extend.texi: Add documentation for __is_member_function_pointer Ken Matsui ` (20 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_function): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 4c8c0631ca7..8ad88516c04 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29628,6 +29628,11 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_function (@var{type})} +If @var{type} is a function type ([dcl.fct]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + @c FIXME Commented out for GCC 13, discuss user interface for GCC 14. @c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} @c If template arguments for @code{template} can be deduced from -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 05/11] gcc/doc/extend.texi: Add documentation for __is_member_function_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (2 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 04/11] gcc/doc/extend.texi: Add documentation for __is_function Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 06/11] gcc/doc/extend.texi: Add documentation for __is_member_object_pointer Ken Matsui ` (19 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_member_function_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 8ad88516c04..9361b425ba1 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29646,6 +29646,11 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __is_member_function_pointer (@var{type})} +If @var{type} is a pointer to member function ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 06/11] gcc/doc/extend.texi: Add documentation for __is_member_object_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (3 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 05/11] gcc/doc/extend.texi: Add documentation for __is_member_function_pointer Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 07/11] gcc/doc/extend.texi: Add documentation for __is_member_pointer Ken Matsui ` (18 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_member_object_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 9361b425ba1..df2df98567a 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29651,6 +29651,11 @@ If @var{type} is a pointer to member function ([dcl.mptr]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_member_object_pointer (@var{type})} +If @var{type} is a pointer to member object ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 07/11] gcc/doc/extend.texi: Add documentation for __is_member_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (4 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 06/11] gcc/doc/extend.texi: Add documentation for __is_member_object_pointer Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 08/11] gcc/doc/extend.texi: Add documentation for __is_object Ken Matsui ` (17 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_member_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index df2df98567a..08276f734f2 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29656,6 +29656,11 @@ If @var{type} is a pointer to member object ([dcl.mptr]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_member_pointer (@var{type})} +If @var{type} is a pointer to member ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 08/11] gcc/doc/extend.texi: Add documentation for __is_object 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (5 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 07/11] gcc/doc/extend.texi: Add documentation for __is_member_pointer Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 09/11] gcc/doc/extend.texi: Add documentation for __is_reference Ken Matsui ` (16 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_object): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 08276f734f2..05f864e3dd5 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29661,6 +29661,11 @@ If @var{type} is a pointer to member ([dcl.mptr]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_object (@var{type})} +If @var{type} is an object type ([basic.types]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 09/11] gcc/doc/extend.texi: Add documentation for __is_reference 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (6 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 08/11] gcc/doc/extend.texi: Add documentation for __is_object Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 10/11] gcc/doc/extend.texi: Add documentation for __is_scoped_enum Ken Matsui ` (15 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_reference): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 05f864e3dd5..d36707fcdf3 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29679,6 +29679,11 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_reference (@var{type})} +If @var{type} is a reference type ([dcl.ref]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_standard_layout (@var{type})} If @var{type} is a standard-layout type ([basic.types]) the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 10/11] gcc/doc/extend.texi: Add documentation for __is_scoped_enum 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (7 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 09/11] gcc/doc/extend.texi: Add documentation for __is_reference Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 0:22 ` [PATCH 11/11] gcc/doc/extend.texi: Add documentation for __remove_pointer Ken Matsui ` (14 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_scoped_enum): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index d36707fcdf3..fb2614176e5 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29684,6 +29684,11 @@ If @var{type} is a reference type ([dcl.ref]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_scoped_enum (@var{type})} +If @var{type} is a scoped enumeration type ([dcl.enum]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_standard_layout (@var{type})} If @var{type} is a standard-layout type ([basic.types]) the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH 11/11] gcc/doc/extend.texi: Add documentation for __remove_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (8 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 10/11] gcc/doc/extend.texi: Add documentation for __is_scoped_enum Ken Matsui @ 2024-03-02 0:22 ` Ken Matsui 2024-03-02 16:00 ` [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (13 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 0:22 UTC (permalink / raw) To: gcc-patches; +Cc: Ken Matsui gcc/ChangeLog: * doc/extend.texi (__remove_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index fb2614176e5..1705ed93934 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29708,6 +29708,11 @@ If @var{type} is a cv union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{@var{type} __remove_pointer (@var{type} @var{t})} +If @var{type} is a pointer type ([dcl.ptr]) then the trait is the @var{type} +pointed to by @var{t}, else it is @var{t}. +@enddefbuiltin + @defbuiltin{bool __underlying_type (@var{type})} The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (9 preceding siblings ...) 2024-03-02 0:22 ` [PATCH 11/11] gcc/doc/extend.texi: Add documentation for __remove_pointer Ken Matsui @ 2024-03-02 16:00 ` Ken Matsui 2024-03-08 16:38 ` Patrick Palka ` (12 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-02 16:00 UTC (permalink / raw) To: Ken Matsui; +Cc: gcc-patches, W Brown Hi Dr. Brown, Sorry for forgetting to CC you. Could you please review my patch series when you get a chance? This patch series adds documentation only for built-ins I implemented. To minimize git conflicts, I will add documentation updates to my existing patches after this patch series gets merged. After that, I will try to add documentation to missing built-ins that I did not implement. Thank you! Sincerely, Ken Matsui On Fri, Mar 1, 2024 at 4:23 PM Ken Matsui <kmatsui@gcc.gnu.org> wrote: > > This patch sorts built-in traits alphabetically for better codebase > consistency and easier future integration of changes. > > gcc/ChangeLog: > > * doc/extend.texi (Type Traits): Sort built-in traits > alphabetically. > > Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> > --- > gcc/doc/extend.texi | 62 ++++++++++++++++++++++----------------------- > 1 file changed, 31 insertions(+), 31 deletions(-) > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index f679c81acf2..b13f9d6f934 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -29499,15 +29499,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > -@defbuiltin{bool __has_nothrow_copy (@var{type})} > -If @code{__has_trivial_copy (type)} is @code{true} then the trait is > -@code{true}, else if @var{type} is a cv-qualified class or union type > -with copy constructors that are known not to throw an exception then > -the trait is @code{true}, else it is @code{false}. > -Requires: @var{type} shall be a complete type, (possibly cv-qualified) > -@code{void}, or an array of unknown bound. > -@enddefbuiltin > - > @defbuiltin{bool __has_nothrow_constructor (@var{type})} > If @code{__has_trivial_constructor (type)} is @code{true} then the trait > is @code{true}, else if @var{type} is a cv class or union type (or array > @@ -29517,6 +29508,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > +@defbuiltin{bool __has_nothrow_copy (@var{type})} > +If @code{__has_trivial_copy (type)} is @code{true} then the trait is > +@code{true}, else if @var{type} is a cv-qualified class or union type > +with copy constructors that are known not to throw an exception then > +the trait is @code{true}, else it is @code{false}. > +Requires: @var{type} shall be a complete type, (possibly cv-qualified) > +@code{void}, or an array of unknown bound. > +@enddefbuiltin > + > @defbuiltin{bool __has_trivial_assign (@var{type})} > If @var{type} is @code{const}- qualified or is a reference type then > the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is > @@ -29527,15 +29527,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > -@defbuiltin{bool __has_trivial_copy (@var{type})} > -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > -type then the trait is @code{true}, else if @var{type} is a cv class > -or union type with a trivial copy constructor ([class.copy]) then the trait > -is @code{true}, else it is @code{false}. Requires: @var{type} shall be > -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > -bound. > -@enddefbuiltin > - > @defbuiltin{bool __has_trivial_constructor (@var{type})} > If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, > else if @var{type} is a cv-qualified class or union type (or array thereof) > @@ -29545,6 +29536,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > +@defbuiltin{bool __has_trivial_copy (@var{type})} > +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > +type then the trait is @code{true}, else if @var{type} is a cv class > +or union type with a trivial copy constructor ([class.copy]) then the trait > +is @code{true}, else it is @code{false}. Requires: @var{type} shall be > +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > +bound. > +@enddefbuiltin > + > @defbuiltin{bool __has_trivial_destructor (@var{type})} > If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type > then the trait is @code{true}, else if @var{type} is a cv class or union > @@ -29560,6 +29560,13 @@ If @var{type} is a class type with a virtual destructor > Requires: If @var{type} is a non-union class type, it shall be a complete type. > @enddefbuiltin > > +@defbuiltin{bool __integer_pack (@var{length})} > +When used as the pattern of a pack expansion within a template > +definition, expands to a template argument pack containing integers > +from @code{0} to @code{@var{length}-1}. This is provided for > +efficient implementation of @code{std::make_integer_sequence}. > +@enddefbuiltin > + > @defbuiltin{bool __is_abstract (@var{type})} > If @var{type} is an abstract class ([class.abstract]) then the trait > is @code{true}, else it is @code{false}. > @@ -29589,12 +29596,6 @@ If @var{type} is a cv-qualified class type, and not a union type > ([basic.compound]) the trait is @code{true}, else it is @code{false}. > @enddefbuiltin > > -@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > -@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > -@c If template arguments for @code{template} can be deduced from > -@c @code{type} or obtained from default template arguments. > -@c @enddefbuiltin > - > @defbuiltin{bool __is_empty (@var{type})} > If @code{__is_class (type)} is @code{false} then the trait is @code{false}. > Otherwise @var{type} is considered empty if and only if: @var{type} > @@ -29617,6 +29618,12 @@ is @code{true}, else it is @code{false}. > Requires: If @var{type} is a class type, it shall be a complete type. > @enddefbuiltin > > +@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > +@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > +@c If template arguments for @code{template} can be deduced from > +@c @code{type} or obtained from default template arguments. > +@c @enddefbuiltin > + > @defbuiltin{bool __is_literal_type (@var{type})} > If @var{type} is a literal type ([basic.types]) the trait is > @code{true}, else it is @code{false}. > @@ -29661,13 +29668,6 @@ The underlying type of @var{type}. > Requires: @var{type} shall be an enumeration type ([dcl.enum]). > @enddefbuiltin > > -@defbuiltin{bool __integer_pack (@var{length})} > -When used as the pattern of a pack expansion within a template > -definition, expands to a template argument pack containing integers > -from @code{0} to @code{@var{length}-1}. This is provided for > -efficient implementation of @code{std::make_integer_sequence}. > -@enddefbuiltin > - > > @node C++ Concepts > @section C++ Concepts > -- > 2.44.0 > ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (10 preceding siblings ...) 2024-03-02 16:00 ` [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui @ 2024-03-08 16:38 ` Patrick Palka 2024-03-08 17:46 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 01/12] extend.texi: Arrange pre-existing " Ken Matsui ` (11 subsequent siblings) 23 siblings, 1 reply; 30+ messages in thread From: Patrick Palka @ 2024-03-08 16:38 UTC (permalink / raw) To: Ken Matsui; +Cc: gcc-patches, jwakely, jason Hi Ken, This patch series LGTM, thanks for these documentation improvements. On Fri, 1 Mar 2024, Ken Matsui wrote: > This patch sorts built-in traits alphabetically for better codebase > consistency and easier future integration of changes. > > gcc/ChangeLog: > > * doc/extend.texi (Type Traits): Sort built-in traits > alphabetically. > > Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> > --- > gcc/doc/extend.texi | 62 ++++++++++++++++++++++----------------------- > 1 file changed, 31 insertions(+), 31 deletions(-) > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index f679c81acf2..b13f9d6f934 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -29499,15 +29499,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > -@defbuiltin{bool __has_nothrow_copy (@var{type})} > -If @code{__has_trivial_copy (type)} is @code{true} then the trait is > -@code{true}, else if @var{type} is a cv-qualified class or union type > -with copy constructors that are known not to throw an exception then > -the trait is @code{true}, else it is @code{false}. > -Requires: @var{type} shall be a complete type, (possibly cv-qualified) > -@code{void}, or an array of unknown bound. > -@enddefbuiltin > - > @defbuiltin{bool __has_nothrow_constructor (@var{type})} > If @code{__has_trivial_constructor (type)} is @code{true} then the trait > is @code{true}, else if @var{type} is a cv class or union type (or array > @@ -29517,6 +29508,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > +@defbuiltin{bool __has_nothrow_copy (@var{type})} > +If @code{__has_trivial_copy (type)} is @code{true} then the trait is > +@code{true}, else if @var{type} is a cv-qualified class or union type > +with copy constructors that are known not to throw an exception then > +the trait is @code{true}, else it is @code{false}. > +Requires: @var{type} shall be a complete type, (possibly cv-qualified) > +@code{void}, or an array of unknown bound. > +@enddefbuiltin > + > @defbuiltin{bool __has_trivial_assign (@var{type})} > If @var{type} is @code{const}- qualified or is a reference type then > the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is > @@ -29527,15 +29527,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > -@defbuiltin{bool __has_trivial_copy (@var{type})} > -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > -type then the trait is @code{true}, else if @var{type} is a cv class > -or union type with a trivial copy constructor ([class.copy]) then the trait > -is @code{true}, else it is @code{false}. Requires: @var{type} shall be > -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > -bound. > -@enddefbuiltin > - > @defbuiltin{bool __has_trivial_constructor (@var{type})} > If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, > else if @var{type} is a cv-qualified class or union type (or array thereof) > @@ -29545,6 +29536,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > +@defbuiltin{bool __has_trivial_copy (@var{type})} > +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > +type then the trait is @code{true}, else if @var{type} is a cv class > +or union type with a trivial copy constructor ([class.copy]) then the trait > +is @code{true}, else it is @code{false}. Requires: @var{type} shall be > +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > +bound. > +@enddefbuiltin > + > @defbuiltin{bool __has_trivial_destructor (@var{type})} > If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type > then the trait is @code{true}, else if @var{type} is a cv class or union > @@ -29560,6 +29560,13 @@ If @var{type} is a class type with a virtual destructor > Requires: If @var{type} is a non-union class type, it shall be a complete type. > @enddefbuiltin > > +@defbuiltin{bool __integer_pack (@var{length})} > +When used as the pattern of a pack expansion within a template > +definition, expands to a template argument pack containing integers > +from @code{0} to @code{@var{length}-1}. This is provided for > +efficient implementation of @code{std::make_integer_sequence}. > +@enddefbuiltin > + > @defbuiltin{bool __is_abstract (@var{type})} > If @var{type} is an abstract class ([class.abstract]) then the trait > is @code{true}, else it is @code{false}. > @@ -29589,12 +29596,6 @@ If @var{type} is a cv-qualified class type, and not a union type > ([basic.compound]) the trait is @code{true}, else it is @code{false}. > @enddefbuiltin > > -@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > -@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > -@c If template arguments for @code{template} can be deduced from > -@c @code{type} or obtained from default template arguments. > -@c @enddefbuiltin > - > @defbuiltin{bool __is_empty (@var{type})} > If @code{__is_class (type)} is @code{false} then the trait is @code{false}. > Otherwise @var{type} is considered empty if and only if: @var{type} > @@ -29617,6 +29618,12 @@ is @code{true}, else it is @code{false}. > Requires: If @var{type} is a class type, it shall be a complete type. > @enddefbuiltin > > +@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > +@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > +@c If template arguments for @code{template} can be deduced from > +@c @code{type} or obtained from default template arguments. > +@c @enddefbuiltin > + > @defbuiltin{bool __is_literal_type (@var{type})} > If @var{type} is a literal type ([basic.types]) the trait is > @code{true}, else it is @code{false}. > @@ -29661,13 +29668,6 @@ The underlying type of @var{type}. > Requires: @var{type} shall be an enumeration type ([dcl.enum]). > @enddefbuiltin > > -@defbuiltin{bool __integer_pack (@var{length})} > -When used as the pattern of a pack expansion within a template > -definition, expands to a template argument pack containing integers > -from @code{0} to @code{@var{length}-1}. This is provided for > -efficient implementation of @code{std::make_integer_sequence}. > -@enddefbuiltin > - > > @node C++ Concepts > @section C++ Concepts > -- > 2.44.0 > > ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically 2024-03-08 16:38 ` Patrick Palka @ 2024-03-08 17:46 ` Ken Matsui 0 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-08 17:46 UTC (permalink / raw) To: Patrick Palka; +Cc: Ken Matsui, gcc-patches, jwakely, jason On Fri, Mar 8, 2024 at 8:38 AM Patrick Palka <ppalka@redhat.com> wrote: > > Hi Ken, > > This patch series LGTM, thanks for these documentation improvements. Thank you for your time to review! I actually have some changes to these patches, so I will re-send those to you once they are ready. > > On Fri, 1 Mar 2024, Ken Matsui wrote: > > > This patch sorts built-in traits alphabetically for better codebase > > consistency and easier future integration of changes. > > > > gcc/ChangeLog: > > > > * doc/extend.texi (Type Traits): Sort built-in traits > > alphabetically. > > > > Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> > > --- > > gcc/doc/extend.texi | 62 ++++++++++++++++++++++----------------------- > > 1 file changed, 31 insertions(+), 31 deletions(-) > > > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > > index f679c81acf2..b13f9d6f934 100644 > > --- a/gcc/doc/extend.texi > > +++ b/gcc/doc/extend.texi > > @@ -29499,15 +29499,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > > @code{void}, or an array of unknown bound. > > @enddefbuiltin > > > > -@defbuiltin{bool __has_nothrow_copy (@var{type})} > > -If @code{__has_trivial_copy (type)} is @code{true} then the trait is > > -@code{true}, else if @var{type} is a cv-qualified class or union type > > -with copy constructors that are known not to throw an exception then > > -the trait is @code{true}, else it is @code{false}. > > -Requires: @var{type} shall be a complete type, (possibly cv-qualified) > > -@code{void}, or an array of unknown bound. > > -@enddefbuiltin > > - > > @defbuiltin{bool __has_nothrow_constructor (@var{type})} > > If @code{__has_trivial_constructor (type)} is @code{true} then the trait > > is @code{true}, else if @var{type} is a cv class or union type (or array > > @@ -29517,6 +29508,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > > @code{void}, or an array of unknown bound. > > @enddefbuiltin > > > > +@defbuiltin{bool __has_nothrow_copy (@var{type})} > > +If @code{__has_trivial_copy (type)} is @code{true} then the trait is > > +@code{true}, else if @var{type} is a cv-qualified class or union type > > +with copy constructors that are known not to throw an exception then > > +the trait is @code{true}, else it is @code{false}. > > +Requires: @var{type} shall be a complete type, (possibly cv-qualified) > > +@code{void}, or an array of unknown bound. > > +@enddefbuiltin > > + > > @defbuiltin{bool __has_trivial_assign (@var{type})} > > If @var{type} is @code{const}- qualified or is a reference type then > > the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is > > @@ -29527,15 +29527,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > > @code{void}, or an array of unknown bound. > > @enddefbuiltin > > > > -@defbuiltin{bool __has_trivial_copy (@var{type})} > > -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > > -type then the trait is @code{true}, else if @var{type} is a cv class > > -or union type with a trivial copy constructor ([class.copy]) then the trait > > -is @code{true}, else it is @code{false}. Requires: @var{type} shall be > > -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > > -bound. > > -@enddefbuiltin > > - > > @defbuiltin{bool __has_trivial_constructor (@var{type})} > > If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, > > else if @var{type} is a cv-qualified class or union type (or array thereof) > > @@ -29545,6 +29536,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > > @code{void}, or an array of unknown bound. > > @enddefbuiltin > > > > +@defbuiltin{bool __has_trivial_copy (@var{type})} > > +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > > +type then the trait is @code{true}, else if @var{type} is a cv class > > +or union type with a trivial copy constructor ([class.copy]) then the trait > > +is @code{true}, else it is @code{false}. Requires: @var{type} shall be > > +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > > +bound. > > +@enddefbuiltin > > + > > @defbuiltin{bool __has_trivial_destructor (@var{type})} > > If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type > > then the trait is @code{true}, else if @var{type} is a cv class or union > > @@ -29560,6 +29560,13 @@ If @var{type} is a class type with a virtual destructor > > Requires: If @var{type} is a non-union class type, it shall be a complete type. > > @enddefbuiltin > > > > +@defbuiltin{bool __integer_pack (@var{length})} > > +When used as the pattern of a pack expansion within a template > > +definition, expands to a template argument pack containing integers > > +from @code{0} to @code{@var{length}-1}. This is provided for > > +efficient implementation of @code{std::make_integer_sequence}. > > +@enddefbuiltin > > + > > @defbuiltin{bool __is_abstract (@var{type})} > > If @var{type} is an abstract class ([class.abstract]) then the trait > > is @code{true}, else it is @code{false}. > > @@ -29589,12 +29596,6 @@ If @var{type} is a cv-qualified class type, and not a union type > > ([basic.compound]) the trait is @code{true}, else it is @code{false}. > > @enddefbuiltin > > > > -@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > > -@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > > -@c If template arguments for @code{template} can be deduced from > > -@c @code{type} or obtained from default template arguments. > > -@c @enddefbuiltin > > - > > @defbuiltin{bool __is_empty (@var{type})} > > If @code{__is_class (type)} is @code{false} then the trait is @code{false}. > > Otherwise @var{type} is considered empty if and only if: @var{type} > > @@ -29617,6 +29618,12 @@ is @code{true}, else it is @code{false}. > > Requires: If @var{type} is a class type, it shall be a complete type. > > @enddefbuiltin > > > > +@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > > +@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > > +@c If template arguments for @code{template} can be deduced from > > +@c @code{type} or obtained from default template arguments. > > +@c @enddefbuiltin > > + > > @defbuiltin{bool __is_literal_type (@var{type})} > > If @var{type} is a literal type ([basic.types]) the trait is > > @code{true}, else it is @code{false}. > > @@ -29661,13 +29668,6 @@ The underlying type of @var{type}. > > Requires: @var{type} shall be an enumeration type ([dcl.enum]). > > @enddefbuiltin > > > > -@defbuiltin{bool __integer_pack (@var{length})} > > -When used as the pattern of a pack expansion within a template > > -definition, expands to a template argument pack containing integers > > -from @code{0} to @code{@var{length}-1}. This is provided for > > -efficient implementation of @code{std::make_integer_sequence}. > > -@enddefbuiltin > > - > > > > @node C++ Concepts > > @section C++ Concepts > > -- > > 2.44.0 > > > > > ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 01/12] extend.texi: Arrange pre-existing built-in traits alphabetically 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (11 preceding siblings ...) 2024-03-08 16:38 ` Patrick Palka @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:38 ` Ken Matsui ` (2 more replies) 2024-03-14 7:22 ` [PATCH v2 02/12] extend.texi: Add documentation for __is_array Ken Matsui ` (10 subsequent siblings) 23 siblings, 3 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui Ok for trunk? -- >8 -- This patch arranges pre-existing built-in traits alphabetically for better codebase consistency and easier future integration of changes. gcc/ChangeLog: * doc/extend.texi (Type Traits): Arrange pre-existing built-in traits alphabetically. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 62 ++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index f679c81acf2..b13f9d6f934 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29499,15 +29499,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin -@defbuiltin{bool __has_nothrow_copy (@var{type})} -If @code{__has_trivial_copy (type)} is @code{true} then the trait is -@code{true}, else if @var{type} is a cv-qualified class or union type -with copy constructors that are known not to throw an exception then -the trait is @code{true}, else it is @code{false}. -Requires: @var{type} shall be a complete type, (possibly cv-qualified) -@code{void}, or an array of unknown bound. -@enddefbuiltin - @defbuiltin{bool __has_nothrow_constructor (@var{type})} If @code{__has_trivial_constructor (type)} is @code{true} then the trait is @code{true}, else if @var{type} is a cv class or union type (or array @@ -29517,6 +29508,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_nothrow_copy (@var{type})} +If @code{__has_trivial_copy (type)} is @code{true} then the trait is +@code{true}, else if @var{type} is a cv-qualified class or union type +with copy constructors that are known not to throw an exception then +the trait is @code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, (possibly cv-qualified) +@code{void}, or an array of unknown bound. +@enddefbuiltin + @defbuiltin{bool __has_trivial_assign (@var{type})} If @var{type} is @code{const}- qualified or is a reference type then the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is @@ -29527,15 +29527,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin -@defbuiltin{bool __has_trivial_copy (@var{type})} -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference -type then the trait is @code{true}, else if @var{type} is a cv class -or union type with a trivial copy constructor ([class.copy]) then the trait -is @code{true}, else it is @code{false}. Requires: @var{type} shall be -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown -bound. -@enddefbuiltin - @defbuiltin{bool __has_trivial_constructor (@var{type})} If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type (or array thereof) @@ -29545,6 +29536,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_trivial_copy (@var{type})} +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference +type then the trait is @code{true}, else if @var{type} is a cv class +or union type with a trivial copy constructor ([class.copy]) then the trait +is @code{true}, else it is @code{false}. Requires: @var{type} shall be +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown +bound. +@enddefbuiltin + @defbuiltin{bool __has_trivial_destructor (@var{type})} If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type then the trait is @code{true}, else if @var{type} is a cv class or union @@ -29560,6 +29560,13 @@ If @var{type} is a class type with a virtual destructor Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __integer_pack (@var{length})} +When used as the pattern of a pack expansion within a template +definition, expands to a template argument pack containing integers +from @code{0} to @code{@var{length}-1}. This is provided for +efficient implementation of @code{std::make_integer_sequence}. +@enddefbuiltin + @defbuiltin{bool __is_abstract (@var{type})} If @var{type} is an abstract class ([class.abstract]) then the trait is @code{true}, else it is @code{false}. @@ -29589,12 +29596,6 @@ If @var{type} is a cv-qualified class type, and not a union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin -@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. -@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} -@c If template arguments for @code{template} can be deduced from -@c @code{type} or obtained from default template arguments. -@c @enddefbuiltin - @defbuiltin{bool __is_empty (@var{type})} If @code{__is_class (type)} is @code{false} then the trait is @code{false}. Otherwise @var{type} is considered empty if and only if: @var{type} @@ -29617,6 +29618,12 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. +@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} +@c If template arguments for @code{template} can be deduced from +@c @code{type} or obtained from default template arguments. +@c @enddefbuiltin + @defbuiltin{bool __is_literal_type (@var{type})} If @var{type} is a literal type ([basic.types]) the trait is @code{true}, else it is @code{false}. @@ -29661,13 +29668,6 @@ The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). @enddefbuiltin -@defbuiltin{bool __integer_pack (@var{length})} -When used as the pattern of a pack expansion within a template -definition, expands to a template argument pack containing integers -from @code{0} to @code{@var{length}-1}. This is provided for -efficient implementation of @code{std::make_integer_sequence}. -@enddefbuiltin - @node C++ Concepts @section C++ Concepts -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: [PATCH v2 01/12] extend.texi: Arrange pre-existing built-in traits alphabetically 2024-03-14 7:22 ` [PATCH v2 01/12] extend.texi: Arrange pre-existing " Ken Matsui @ 2024-03-14 7:38 ` Ken Matsui 2024-03-15 7:20 ` [PATCH v3 1/2] " Ken Matsui 2024-03-15 7:20 ` [PATCH v3 2/2] extend.texi: Add documentation for all missing built-in traits [PR87343] Ken Matsui 2 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:38 UTC (permalink / raw) To: Ken Matsui; +Cc: gcc-patches, jason, ppalka On Thu, Mar 14, 2024 at 12:28 AM Ken Matsui <kmatsui@gcc.gnu.org> wrote: > > Ok for trunk? It appears that my update notes have somehow vanished. I have rectified several inconsistencies and introduced sub-sections to enhance readability. Although I contemplated merging certain patches for a more streamlined presentation, I ultimately opted to maintain the existing structure of commits, believing it to better suit our commit granularity. > > -- >8 -- > > This patch arranges pre-existing built-in traits alphabetically for > better codebase consistency and easier future integration of changes. > > gcc/ChangeLog: > > * doc/extend.texi (Type Traits): Arrange pre-existing built-in > traits alphabetically. > > Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> > --- > gcc/doc/extend.texi | 62 ++++++++++++++++++++++----------------------- > 1 file changed, 31 insertions(+), 31 deletions(-) > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index f679c81acf2..b13f9d6f934 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -29499,15 +29499,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > -@defbuiltin{bool __has_nothrow_copy (@var{type})} > -If @code{__has_trivial_copy (type)} is @code{true} then the trait is > -@code{true}, else if @var{type} is a cv-qualified class or union type > -with copy constructors that are known not to throw an exception then > -the trait is @code{true}, else it is @code{false}. > -Requires: @var{type} shall be a complete type, (possibly cv-qualified) > -@code{void}, or an array of unknown bound. > -@enddefbuiltin > - > @defbuiltin{bool __has_nothrow_constructor (@var{type})} > If @code{__has_trivial_constructor (type)} is @code{true} then the trait > is @code{true}, else if @var{type} is a cv class or union type (or array > @@ -29517,6 +29508,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > +@defbuiltin{bool __has_nothrow_copy (@var{type})} > +If @code{__has_trivial_copy (type)} is @code{true} then the trait is > +@code{true}, else if @var{type} is a cv-qualified class or union type > +with copy constructors that are known not to throw an exception then > +the trait is @code{true}, else it is @code{false}. > +Requires: @var{type} shall be a complete type, (possibly cv-qualified) > +@code{void}, or an array of unknown bound. > +@enddefbuiltin > + > @defbuiltin{bool __has_trivial_assign (@var{type})} > If @var{type} is @code{const}- qualified or is a reference type then > the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is > @@ -29527,15 +29527,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > -@defbuiltin{bool __has_trivial_copy (@var{type})} > -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > -type then the trait is @code{true}, else if @var{type} is a cv class > -or union type with a trivial copy constructor ([class.copy]) then the trait > -is @code{true}, else it is @code{false}. Requires: @var{type} shall be > -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > -bound. > -@enddefbuiltin > - > @defbuiltin{bool __has_trivial_constructor (@var{type})} > If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, > else if @var{type} is a cv-qualified class or union type (or array thereof) > @@ -29545,6 +29536,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) > @code{void}, or an array of unknown bound. > @enddefbuiltin > > +@defbuiltin{bool __has_trivial_copy (@var{type})} > +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference > +type then the trait is @code{true}, else if @var{type} is a cv class > +or union type with a trivial copy constructor ([class.copy]) then the trait > +is @code{true}, else it is @code{false}. Requires: @var{type} shall be > +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown > +bound. > +@enddefbuiltin > + > @defbuiltin{bool __has_trivial_destructor (@var{type})} > If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type > then the trait is @code{true}, else if @var{type} is a cv class or union > @@ -29560,6 +29560,13 @@ If @var{type} is a class type with a virtual destructor > Requires: If @var{type} is a non-union class type, it shall be a complete type. > @enddefbuiltin > > +@defbuiltin{bool __integer_pack (@var{length})} > +When used as the pattern of a pack expansion within a template > +definition, expands to a template argument pack containing integers > +from @code{0} to @code{@var{length}-1}. This is provided for > +efficient implementation of @code{std::make_integer_sequence}. > +@enddefbuiltin > + > @defbuiltin{bool __is_abstract (@var{type})} > If @var{type} is an abstract class ([class.abstract]) then the trait > is @code{true}, else it is @code{false}. > @@ -29589,12 +29596,6 @@ If @var{type} is a cv-qualified class type, and not a union type > ([basic.compound]) the trait is @code{true}, else it is @code{false}. > @enddefbuiltin > > -@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > -@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > -@c If template arguments for @code{template} can be deduced from > -@c @code{type} or obtained from default template arguments. > -@c @enddefbuiltin > - > @defbuiltin{bool __is_empty (@var{type})} > If @code{__is_class (type)} is @code{false} then the trait is @code{false}. > Otherwise @var{type} is considered empty if and only if: @var{type} > @@ -29617,6 +29618,12 @@ is @code{true}, else it is @code{false}. > Requires: If @var{type} is a class type, it shall be a complete type. > @enddefbuiltin > > +@c FIXME Commented out for GCC 13, discuss user interface for GCC 14. > +@c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} > +@c If template arguments for @code{template} can be deduced from > +@c @code{type} or obtained from default template arguments. > +@c @enddefbuiltin > + > @defbuiltin{bool __is_literal_type (@var{type})} > If @var{type} is a literal type ([basic.types]) the trait is > @code{true}, else it is @code{false}. > @@ -29661,13 +29668,6 @@ The underlying type of @var{type}. > Requires: @var{type} shall be an enumeration type ([dcl.enum]). > @enddefbuiltin > > -@defbuiltin{bool __integer_pack (@var{length})} > -When used as the pattern of a pack expansion within a template > -definition, expands to a template argument pack containing integers > -from @code{0} to @code{@var{length}-1}. This is provided for > -efficient implementation of @code{std::make_integer_sequence}. > -@enddefbuiltin > - > > @node C++ Concepts > @section C++ Concepts > -- > 2.44.0 > ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v3 1/2] extend.texi: Arrange pre-existing built-in traits alphabetically 2024-03-14 7:22 ` [PATCH v2 01/12] extend.texi: Arrange pre-existing " Ken Matsui 2024-03-14 7:38 ` Ken Matsui @ 2024-03-15 7:20 ` Ken Matsui 2024-03-15 7:20 ` [PATCH v3 2/2] extend.texi: Add documentation for all missing built-in traits [PR87343] Ken Matsui 2 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-15 7:20 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui Consolidated most patches into one for easier review and added documentation for all missing built-in traits. Ok for trunk? -- >8 -- This patch arranges pre-existing built-in traits alphabetically for better codebase consistency and easier future integration of changes. gcc/ChangeLog: * doc/extend.texi (Type Traits): Arrange pre-existing built-in traits alphabetically. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 50 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index df0982fdfda..1c61682b102 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29500,15 +29500,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin -@defbuiltin{bool __has_nothrow_copy (@var{type})} -If @code{__has_trivial_copy (type)} is @code{true} then the trait is -@code{true}, else if @var{type} is a cv-qualified class or union type -with copy constructors that are known not to throw an exception then -the trait is @code{true}, else it is @code{false}. -Requires: @var{type} shall be a complete type, (possibly cv-qualified) -@code{void}, or an array of unknown bound. -@enddefbuiltin - @defbuiltin{bool __has_nothrow_constructor (@var{type})} If @code{__has_trivial_constructor (type)} is @code{true} then the trait is @code{true}, else if @var{type} is a cv class or union type (or array @@ -29518,6 +29509,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_nothrow_copy (@var{type})} +If @code{__has_trivial_copy (type)} is @code{true} then the trait is +@code{true}, else if @var{type} is a cv-qualified class or union type +with copy constructors that are known not to throw an exception then +the trait is @code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, (possibly cv-qualified) +@code{void}, or an array of unknown bound. +@enddefbuiltin + @defbuiltin{bool __has_trivial_assign (@var{type})} If @var{type} is @code{const}- qualified or is a reference type then the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is @@ -29528,15 +29528,6 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin -@defbuiltin{bool __has_trivial_copy (@var{type})} -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference -type then the trait is @code{true}, else if @var{type} is a cv class -or union type with a trivial copy constructor ([class.copy]) then the trait -is @code{true}, else it is @code{false}. Requires: @var{type} shall be -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown -bound. -@enddefbuiltin - @defbuiltin{bool __has_trivial_constructor (@var{type})} If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type (or array thereof) @@ -29546,6 +29537,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_trivial_copy (@var{type})} +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference +type then the trait is @code{true}, else if @var{type} is a cv class +or union type with a trivial copy constructor ([class.copy]) then the trait +is @code{true}, else it is @code{false}. Requires: @var{type} shall be +a complete type, (possibly cv-qualified) @code{void}, or an array of unknown +bound. +@enddefbuiltin + @defbuiltin{bool __has_trivial_destructor (@var{type})} If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type then the trait is @code{true}, else if @var{type} is a cv class or union @@ -29561,6 +29561,13 @@ If @var{type} is a class type with a virtual destructor Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __integer_pack (@var{length})} +When used as the pattern of a pack expansion within a template +definition, expands to a template argument pack containing integers +from @code{0} to @code{@var{length}-1}. This is provided for +efficient implementation of @code{std::make_integer_sequence}. +@enddefbuiltin + @defbuiltin{bool __is_abstract (@var{type})} If @var{type} is an abstract class ([class.abstract]) then the trait is @code{true}, else it is @code{false}. @@ -29662,13 +29669,6 @@ The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). @enddefbuiltin -@defbuiltin{bool __integer_pack (@var{length})} -When used as the pattern of a pack expansion within a template -definition, expands to a template argument pack containing integers -from @code{0} to @code{@var{length}-1}. This is provided for -efficient implementation of @code{std::make_integer_sequence}. -@enddefbuiltin - @node C++ Concepts @section C++ Concepts -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v3 2/2] extend.texi: Add documentation for all missing built-in traits [PR87343] 2024-03-14 7:22 ` [PATCH v2 01/12] extend.texi: Arrange pre-existing " Ken Matsui 2024-03-14 7:38 ` Ken Matsui 2024-03-15 7:20 ` [PATCH v3 1/2] " Ken Matsui @ 2024-03-15 7:20 ` Ken Matsui 2024-03-16 9:47 ` [PATCH v4 " Ken Matsui 2 siblings, 1 reply; 30+ messages in thread From: Ken Matsui @ 2024-03-15 7:20 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui PR c++/87343 gcc/ChangeLog: * doc/extend.texi (Expression-yielding Type Traits): New subsection. (Type-yielding Type Traits): Likewise. (C++ Concepts): Move __is_same to ... (Expression-yielding Type Traits): ... here. (__has_unique_object_representations) New documentation. (__is_array): Likewise. (__is_assignable): Likewise. (__is_bounded_array): Likewise. (__is_constructible): Likewise. (__is_convertible): Likewise. (__is_function): Likewise. (__is_layout_compatible): Likewise. (__is_member_function_pointer): Likewise. (__is_member_object_pointer): Likewise. (__is_member_pointer): Likewise. (__is_nothrow_assignable): Likewise. (__is_nothrow_constructible): Likewise. (__is_nothrow_convertible): Likewise. (__is_object): Likewise. (__is_pointer_interconvertible_base_of): Likewise. (__is_reference): Likewise. (__is_scoped_enum): Likewise. (__is_trivially_assignable): Likewise. (__is_trivially_constructible): Likewise. (__is_trivially_copyable): Likewise. (__reference_constructs_from_temporary): Likewise. (__reference_converts_from_temporary): Likewise. (__bases): Likewise. (__direct_bases): Likewise. (__remove_cv): Likewise. (__remove_cvref): Likewise. (__remove_pointer): Likewise. (__remove_reference): Likewise. (__type_pack_element): Likewise. (__underlying_type): Likewise. (__is_enum): Add @anchor and @ref to related traits. (__is_trivial): Likewise. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 279 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 270 insertions(+), 9 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 1c61682b102..2c8199fb1ab 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29489,6 +29489,12 @@ compile-time determination of various characteristics of a type (or of a pair of types). + +@subsection Expression-yielding Type Traits + +These built-in traits yield an expression of type @code{bool} +or @code{size_t}. + @defbuiltin{bool __has_nothrow_assign (@var{type})} If @var{type} is @code{const}-qualified or is a reference type then the trait is @code{false}. Otherwise if @code{__has_trivial_assign (type)} @@ -29555,6 +29561,15 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_unique_object_representations (@var{type})} +If @code{__is_trivially_copyable (type)} is @code{true} and @var{type} +has no padding bits, meaning that any two objects of @var{type} with +the same value will have identical object representations, then +the trait is @code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, (possibly cv-qualified) +@code{void}, or an array of unknown bound. +@enddefbuiltin + @defbuiltin{bool __has_virtual_destructor (@var{type})} If @var{type} is a class type with a virtual destructor ([class.dtor]) then the trait is @code{true}, else it is @code{false}. @@ -29580,6 +29595,23 @@ If @var{type} is an aggregate type ([dcl.init.aggr]) the trait is Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@anchor{__is_array} +@defbuiltin{bool __is_array (@var{type})} +If @var{type} is an array type ([dcl.array]) the trait is @code{true}, +else it is @code{false}. +See also: @ref{__is_bounded_array}. +@enddefbuiltin + +@anchor{__is_assignable} +@defbuiltin{bool __is_assignable (@var{type1}, @var{type2})} +If @var{type1} is a class type that has an assignment operator +accepting @var{type2}, or if @var{type2} can be implicitly converted to +a type that @var{type1} can accept on assignment, then the trait is +@code{true}, else it is @code{false}. +Requires: If @var{type1} is a class type, it shall be a complete type. +See also: @ref{__is_nothrow_assignable}, @ref{__is_trivially_assignable}. +@enddefbuiltin + @defbuiltin{bool __is_base_of (@var{base_type}, @var{derived_type})} If @var{base_type} is a base class of @var{derived_type} ([class.derived]) then the trait is @code{true}, otherwise it is @code{false}. @@ -29592,11 +29624,37 @@ type (disregarding cv-qualifiers), @var{derived_type} shall be a complete type. A diagnostic is produced if this requirement is not met. @enddefbuiltin +@anchor{__is_bounded_array} +@defbuiltin{bool __is_bounded_array (@var{type})} +If @var{type} is an array type of known bound ([dcl.array]) +the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_array}. +@enddefbuiltin + @defbuiltin{bool __is_class (@var{type})} If @var{type} is a cv-qualified class type, and not a union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@anchor{__is_constructible} +@defbuiltin{bool __is_constructible (@var{type}, @var{arg_types}...)} +If @var{type} is an object or reference type that can be constructed with +arguments of types @var{arg_types}..., then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type} or @var{arg_types}... is a class type, it shall be +a complete type. +See also: @ref{__is_nothrow_constructible}, @ref{__is_trivially_constructible}. +@enddefbuiltin + +@anchor{__is_convertible} +@defbuiltin{bool __is_convertible (@var{from_type}, @var{to_type})} +If @var{from_type} can be implicitly converted to @var{to_type} then the +trait is @code{true}, else it is @code{false}. +Requires: If @var{from_type} or @var{to_type} is a class type, it shall be +a complete type. +See also: @ref{__is_nothrow_convertible}. +@enddefbuiltin + @c FIXME Commented out for GCC 13, discuss user interface for GCC 14. @c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} @c If template arguments for @code{template} can be deduced from @@ -29614,9 +29672,11 @@ has no base classes @var{base_type} for which Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@anchor{__is_enum} @defbuiltin{bool __is_enum (@var{type})} If @var{type} is a cv enumeration type ([basic.compound]) the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_scoped_enum}. @enddefbuiltin @defbuiltin{bool __is_final (@var{type})} @@ -29625,6 +29685,18 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_function (@var{type})} +If @var{type} is a function type ([dcl.fct]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + +@defbuiltin{bool __is_layout_compatible (@var{type1}, @var{type2})} +If @var{type1} and @var{type2} are layout-compatible ([basic.types]) then +the trait is @code{true}, else it is @code{false}. +Requires: @var{type1} and @var{type2} shall be complete types, (possibly +cv-qualified) @code{void}, or arrays of unknown bound. +@enddefbuiltin + @defbuiltin{bool __is_literal_type (@var{type})} If @var{type} is a literal type ([basic.types]) the trait is @code{true}, else it is @code{false}. @@ -29632,6 +29704,72 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@anchor{__is_member_function_pointer} +@defbuiltin{bool __is_member_function_pointer (@var{type})} +If @var{type} is a pointer to member function type ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_member_object_pointer}, @ref{__is_member_pointer}. +@enddefbuiltin + +@anchor{__is_member_object_pointer} +@defbuiltin{bool __is_member_object_pointer (@var{type})} +If @var{type} is a pointer to member object type ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_member_function_pointer}, @ref{__is_member_pointer}. +@enddefbuiltin + +@anchor{__is_member_pointer} +@defbuiltin{bool __is_member_pointer (@var{type})} +If @var{type} is a pointer to member type ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_member_function_pointer}, @ref{__is_member_object_pointer}. +@enddefbuiltin + +@anchor{__is_nothrow_assignable} +@defbuiltin{bool __is_nothrow_assignable (@var{type1}, @var{type2})} +If @code{__is_assignable (type1, type2)} is @code{true} and the assignment +operation does not throw an exception then the trait is @code{true}, else +it is @code{false}. +Requires: If @var{type1} or @var{type2} is a class type, it shall be a +complete type. +See also: @ref{__is_assignable}, @ref{__is_trivially_assignable}. +@enddefbuiltin + +@anchor{__is_nothrow_constructible} +@defbuiltin{bool __is_nothrow_constructible (@var{type}, @var{arg_types}...)} +If @code{__is_constructible (type, arg_types...)} is @code{true} and the +construction does not throw an exception then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type} or @var{arg_types}... is a class type, it shall be +a complete type. +See also: @ref{__is_constructible}, @ref{__is_trivially_constructible}. +@enddefbuiltin + +@anchor{__is_nothrow_convertible} +@defbuiltin{bool __is_nothrow_convertible (@var{from_type}, @var{to_type})} +If @code{__is_convertible (from_type, to_type)} is @code{true} and the +conversion does not throw an exception then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{from_type} or @var{to_type} is a class type, it shall be +a complete type. +See also: @ref{__is_convertible}. +@enddefbuiltin + +@defbuiltin{bool __is_object (@var{type})} +If @var{type} is an object type ([basic.types]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + +@defbuiltin{bool __is_pointer_interconvertible_base_of (@var{base_type}, @var{derived_type})} +If @var{base_type} and @var{derived_type} are pointer-interconvertible +([conv.ptr]) and @var{base_type} is a base class of @var{derived_type} +([class.derived]) then the trait is @code{true}, else it is @code{false}. +Requires: if @code{__is_class (base_type)} and @code{__is_class (derived_type)} +are @code{true} and @var{base_type} and @var{derived_type} are not the same +type (disregarding cv-qualifiers), @var{derived_type} shall be a complete +type. A diagnostic is produced if this requirement is not met. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. @@ -29645,6 +29783,23 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_reference (@var{type})} +If @var{type} is a reference type ([dcl.ref]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + +@defbuiltin{bool __is_same (@var{type1}, @var{type2})} +A binary type trait: @code{true} whenever the @var{type1} and +@var{type2} refer to the same type. +@enddefbuiltin + +@anchor{__is_scoped_enum} +@defbuiltin{bool __is_scoped_enum (@var{type})} +If @var{type} is a scoped enumeration type ([dcl.enum]) the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_enum}. +@enddefbuiltin + @defbuiltin{bool __is_standard_layout (@var{type})} If @var{type} is a standard-layout type ([basic.types]) the trait is @code{true}, else it is @code{false}. @@ -29652,11 +29807,45 @@ Requires: @var{type} shall be a complete type, an array of complete types, or (possibly cv-qualified) @code{void}. @enddefbuiltin +@anchor{__is_trivial} @defbuiltin{bool __is_trivial (@var{type})} If @var{type} is a trivial type ([basic.types]) the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, an array of complete types, or (possibly cv-qualified) @code{void}. +See also: @ref{__is_trivially_assignable}, @ref{__is_trivially_constructible}, +@ref{__is_trivially_copyable}. +@enddefbuiltin + +@anchor{__is_trivially_assignable} +@defbuiltin{bool __is_trivially_assignable (@var{type1}, @var{type2})} +If @code{__is_assignable (type1, type2)} is @code{true} and +@code{__is_trivial (type1)} is @code{true} then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type1} or @var{type2} is a class type, it shall be a +complete type. +See also: @ref{__is_trivial}, @ref{__is_assignable}, +@ref{__is_nothrow_assignable}. +@enddefbuiltin + +@anchor{__is_trivially_constructible} +@defbuiltin{bool __is_trivially_constructible (@var{type}, @var{arg_types}...)} +If @code{__is_constructible (type, arg_types...)} is @code{true} and +@code{__is_trivial (type)} is @code{true} then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type} or @var{arg_types}... is a class type, it shall be +a complete type. +See also: @ref{__is_trivial}, @ref{__is_constructible}, +@ref{__is_nothrow_constructible}. +@enddefbuiltin + +@anchor{__is_trivially_copyable} +@defbuiltin{bool __is_trivially_copyable (@var{type})} +If @var{type} is a trivially copyable type ([basic.types]) the trait is +@code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, an array of complete types, +or (possibly cv-qualified) @code{void}. +See also: @ref{__is_trivial}. @enddefbuiltin @defbuiltin{bool __is_union (@var{type})} @@ -29664,12 +29853,93 @@ If @var{type} is a cv union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@anchor{__reference_constructs_from_temporary} +@defbuiltin{bool __reference_constructs_from_temporary (@var{type1}, @var{type2})} +If @var{type1} is a reference type and a value of type @var{type2} can be +bound to @var{type1} in direct-initialization, such that a temporary object +would be bound to the reference, then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type1} or @var{type2} is a class type, it shall be +a complete type. +See also: @ref{__reference_converts_from_temporary} +@enddefbuiltin + +@anchor{__reference_converts_from_temporary} +@defbuiltin{bool __reference_converts_from_temporary (@var{type1}, @var{type2})} +If @var{type1} is a reference type and a value of type @var{type2} can be +bound to @var{type1} in copy-initialization, such that a temporary object +would be bound to the reference, then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type1} or @var{type2} is a class type, it shall be +a complete type. +See also: @ref{__reference_constructs_from_temporary} +@enddefbuiltin + @defbuiltin{bool __underlying_type (@var{type})} The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). @enddefbuiltin +@subsection Type-yielding Type Traits + +These built-in traits yield a type. + +@anchor{__bases} +@defbuiltin{@var{types}... __bases (@var{type})} +If @var{type} is a class type ([class.derived]) then the trait is a +typelist of the base classes of @var{type}, else it is an empty typelist. +See also: @ref{__direct_bases}. +@enddefbuiltin + +@anchor{__direct_bases} +@defbuiltin{@var{types}... __direct_bases (@var{type})} +If @var{type} is a class type ([class.derived]) then the trait is a +typelist of the direct base classes of @var{type}, else it is an empty +typelist. +See also: @ref{__bases}. +@enddefbuiltin + +@anchor{__remove_cv} +@defbuiltin{@var{type} __remove_cv (@var{cv_type})} +If @var{cv_type} is a cv-qualified type ([basic.type.qualifier]), then the +trait is the type @var{type} of @var{cv_type} with its top-level cv-qualifiers +removed, else it is @var{cv_type}. +See also: @ref{__remove_cvref} +@enddefbuiltin + +@anchor{__remove_cvref} +@defbuiltin{@var{type} __remove_cvref (@var{cvref_type})} +If @var{cvref_type} is a cv-qualified ([basic.type.qualifier]) or reference +type ([dcl.ref]), then the trait is the type @var{type} of +@var{cvref_type} with its top-level cv-qualifiers and reference removed, +else it is @var{cvref_type}. +See also: @ref{__remove_cv}, @ref{__remove_reference}. +@enddefbuiltin + +@defbuiltin{@var{type} __remove_pointer (@var{ptr_type})} +If @var{ptr_type} is a pointer type ([dcl.ptr]), then the trait is the +@var{type} pointed to by @var{ptr_type}, else it is @var{ptr_type}. +@enddefbuiltin + +@anchor{__remove_reference} +@defbuiltin{@var{type} __remove_reference (@var{ref_type})} +If @var{ref_type} is a reference type ([dcl.ref]), then the trait is the +@var{type} referred to by @var{ref_type}, else it is @var{ref_type}. +See also: @ref{__remove_cvref} +@enddefbuiltin + +@defbuiltin{@var{type} __type_pack_element (int @var{index}, @var{types}...)} +If 0 < @var{index} < sizeof...(@var{types}), then the trait is the +@var{index}-th type in the pack @var{types}..., else it emits an error. +@enddefbuiltin + +@defbuiltin{@var{type} __underlying_type (@var{enum_type})} +If @var{enum_type} is a complete enumeration type ([dcl.enum]), then +the trait is the underlying type of @var{enum_type}, else it emits an error. +@enddefbuiltin + + @node C++ Concepts @section C++ Concepts @@ -29708,15 +29978,6 @@ Introduces constraints on template arguments or requirements for a member function of a class template. @end table -The front end also exposes a number of internal mechanism that can be used -to simplify the writing of type traits. Note that some of these traits are -likely to be removed in the future. - -@defbuiltin{bool __is_same (@var{type1}, @var{type2})} -A binary type trait: @code{true} whenever the @var{type1} and -@var{type2} refer to the same type. -@enddefbuiltin - @node Deprecated Features @section Deprecated Features -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v4 2/2] extend.texi: Add documentation for all missing built-in traits [PR87343] 2024-03-15 7:20 ` [PATCH v3 2/2] extend.texi: Add documentation for all missing built-in traits [PR87343] Ken Matsui @ 2024-03-16 9:47 ` Ken Matsui 0 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-16 9:47 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui Fixed some wording and consistency issues in the documentation. -- >8 -- PR c++/87343 gcc/ChangeLog: * doc/extend.texi (Expression-yielding Type Traits): New subsection. (Type-yielding Type Traits): Likewise. (C++ Concepts): Move __is_same to ... (Expression-yielding Type Traits): ... here. (__is_enum): Add @anchor and @ref to related traits. (__is_trivial): Likewise. (__is_class): Fix documentation. (__underlying_type): Likewise. (__has_nothrow_assign): Ensure consistency. (__has_trivial_constructor): Likewise. (__has_trivial_copy): Likewise. (__has_trivial_assign): Likewise. (__has_trivial_constructor): Likewise. (__has_trivial_copy): Likewise. (__has_trivial_destructor): Likewise. (__has_virtual_destructor): Likewise. (__is_abstract): Likewise. (__is_aggregate): Likewise. (__is_base_of): Likewise. (__is_empty): Likewise. (__is_enum): Likewise. (__is_literal_type): Likewise. (__is_pod): Likewise. (__is_polymorphic): Likewise. (__is_standard_layout): Likewise. (__is_trivial): Likewise. (__is_union): Likewise. (__has_unique_object_representations): New documentation. (__is_array): Likewise. (__is_assignable): Likewise. (__is_bounded_array): Likewise. (__is_constructible): Likewise. (__is_convertible): Likewise. (__is_function): Likewise. (__is_layout_compatible): Likewise. (__is_member_function_pointer): Likewise. (__is_member_object_pointer): Likewise. (__is_member_pointer): Likewise. (__is_nothrow_assignable): Likewise. (__is_nothrow_constructible): Likewise. (__is_nothrow_convertible): Likewise. (__is_object): Likewise. (__is_pointer_interconvertible_base_of): Likewise. (__is_reference): Likewise. (__is_scoped_enum): Likewise. (__is_trivially_assignable): Likewise. (__is_trivially_constructible): Likewise. (__is_trivially_copyable): Likewise. (__reference_constructs_from_temporary): Likewise. (__reference_converts_from_temporary): Likewise. (__bases): Likewise. (__direct_bases): Likewise. (__remove_cv): Likewise. (__remove_cvref): Likewise. (__remove_pointer): Likewise. (__remove_reference): Likewise. (__type_pack_element): Likewise. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 355 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 304 insertions(+), 51 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 1c61682b102..eb61f619e02 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29485,79 +29485,91 @@ Function Multiversioning} for more details. @section Type Traits The C++ front end implements syntactic extensions that allow -compile-time determination of -various characteristics of a type (or of a -pair of types). +compile-time determination of various characteristics of a type +(or of a pair of types). + + +@subsection Value-yielding Type Traits + +Most of these built-ins return a @code{bool} result when invoked; the rest +yields a @code{size_t} value. @defbuiltin{bool __has_nothrow_assign (@var{type})} -If @var{type} is @code{const}-qualified or is a reference type then -the trait is @code{false}. Otherwise if @code{__has_trivial_assign (type)} -is @code{true} then the trait is @code{true}, else if @var{type} is +If @var{type} is @code{const}-qualified or is a reference type, then +the trait is @code{false}. Otherwise, if @code{__has_trivial_assign (type)} +is @code{true}, then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type with copy assignment operators that are -known not to throw an exception then the trait is @code{true}, else it is +known not to throw an exception, then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __has_nothrow_constructor (@var{type})} -If @code{__has_trivial_constructor (type)} is @code{true} then the trait +If @code{__has_trivial_constructor (type)} is @code{true}, then the trait is @code{true}, else if @var{type} is a cv class or union type (or array thereof) with a default constructor that is known not to throw an -exception then the trait is @code{true}, else it is @code{false}. +exception, then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __has_nothrow_copy (@var{type})} -If @code{__has_trivial_copy (type)} is @code{true} then the trait is +If @code{__has_trivial_copy (type)} is @code{true}, then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type -with copy constructors that are known not to throw an exception then +with copy constructors that are known not to throw an exception, then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __has_trivial_assign (@var{type})} -If @var{type} is @code{const}- qualified or is a reference type then +If @var{type} is @code{const}-qualified or is a reference type, then the trait is @code{false}. Otherwise if @code{__is_trivial (type)} is -@code{true} then the trait is @code{true}, else if @var{type} is +@code{true}, then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type with a trivial copy assignment -([class.copy]) then the trait is @code{true}, else it is @code{false}. +([class.copy]), then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __has_trivial_constructor (@var{type})} -If @code{__is_trivial (type)} is @code{true} then the trait is @code{true}, +If @code{__is_trivial (type)} is @code{true}, then the trait is @code{true}, else if @var{type} is a cv-qualified class or union type (or array thereof) -with a trivial default constructor ([class.ctor]) then the trait is @code{true}, -else it is @code{false}. +with a trivial default constructor ([class.ctor]), then +the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __has_trivial_copy (@var{type})} If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference -type then the trait is @code{true}, else if @var{type} is a cv class -or union type with a trivial copy constructor ([class.copy]) then the trait -is @code{true}, else it is @code{false}. Requires: @var{type} shall be -a complete type, (possibly cv-qualified) @code{void}, or an array of unknown -bound. +type, then the trait is @code{true}, else if @var{type} is a cv class +or union type with a trivial copy constructor ([class.copy]), then the trait +is @code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, (possibly cv-qualified) +@code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __has_trivial_destructor (@var{type})} -If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type +If @code{__is_trivial (type)} is @code{true} or @var{type} is a reference type, then the trait is @code{true}, else if @var{type} is a cv class or union -type (or array thereof) with a trivial destructor ([class.dtor]) then +type (or array thereof) with a trivial destructor ([class.dtor]), then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __has_unique_object_representations (@var{type})} +If @code{__is_trivially_copyable (type)} is @code{true} and @var{type} +has no padding bits, then the trait is @code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, (possibly cv-qualified) +@code{void}, or an array of unknown bound. +@enddefbuiltin + @defbuiltin{bool __has_virtual_destructor (@var{type})} If @var{type} is a class type with a virtual destructor -([class.dtor]) then the trait is @code{true}, else it is @code{false}. +([class.dtor]), then the trait is @code{true}, else it is @code{false}. Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin @@ -29569,20 +29581,36 @@ efficient implementation of @code{std::make_integer_sequence}. @enddefbuiltin @defbuiltin{bool __is_abstract (@var{type})} -If @var{type} is an abstract class ([class.abstract]) then the trait +If @var{type} is an abstract class ([class.abstract]), then the trait is @code{true}, else it is @code{false}. Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin @defbuiltin{bool __is_aggregate (@var{type})} -If @var{type} is an aggregate type ([dcl.init.aggr]) the trait is +If @var{type} is an aggregate type ([dcl.init.aggr]), then the trait is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@anchor{__is_array} +@defbuiltin{bool __is_array (@var{type})} +If @var{type} is an array type ([dcl.array]), then the trait is @code{true}, +else it is @code{false}. +See also: @ref{__is_bounded_array}. +@enddefbuiltin + +@anchor{__is_assignable} +@defbuiltin{bool __is_assignable (@var{type1}, @var{type2})} +If @var{type1} is a class type that has @var{type2} of an assignment +operator's right operand, then the trait is @code{true}, +else it is @code{false}. +Requires: If @var{type1} is a class type, it shall be a complete type. +See also: @ref{__is_nothrow_assignable}, @ref{__is_trivially_assignable}. +@enddefbuiltin + @defbuiltin{bool __is_base_of (@var{base_type}, @var{derived_type})} If @var{base_type} is a base class of @var{derived_type} -([class.derived]) then the trait is @code{true}, otherwise it is @code{false}. +([class.derived]), then the trait is @code{true}, else it is @code{false}. Top-level cv-qualifications of @var{base_type} and @var{derived_type} are ignored. For the purposes of this trait, a class type is considered is own base. @@ -29592,9 +29620,35 @@ type (disregarding cv-qualifiers), @var{derived_type} shall be a complete type. A diagnostic is produced if this requirement is not met. @enddefbuiltin +@anchor{__is_bounded_array} +@defbuiltin{bool __is_bounded_array (@var{type})} +If @var{type} is an array type of known bound ([dcl.array]), then +the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_array}. +@enddefbuiltin + @defbuiltin{bool __is_class (@var{type})} -If @var{type} is a cv-qualified class type, and not a union type -([basic.compound]) the trait is @code{true}, else it is @code{false}. +If @var{type} is a (possibly cv-qualified) non-union class type +([basic.compound]), then the trait is @code{true}, else it is @code{false}. +@enddefbuiltin + +@anchor{__is_constructible} +@defbuiltin{bool __is_constructible (@var{type}, @var{arg_types}...)} +If @var{type} is an object or reference type that can be constructed with +arguments of types @var{arg_types}..., then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{type} or @var{arg_types}... being a class type +shall be a complete type. +See also: @ref{__is_nothrow_constructible}, @ref{__is_trivially_constructible}. +@enddefbuiltin + +@anchor{__is_convertible} +@defbuiltin{bool __is_convertible (@var{from_type}, @var{to_type})} +If a value of @var{from_type} can be implicitly converted to a value of +@var{to_type}, then the trait is @code{true}, else it is @code{false}. +Requires: Each of @var{from_type} or @var{to_type} being a class type +shall be a complete type. +See also: @ref{__is_nothrow_convertible}. @enddefbuiltin @c FIXME Commented out for GCC 13, discuss user interface for GCC 14. @@ -29604,8 +29658,8 @@ If @var{type} is a cv-qualified class type, and not a union type @c @enddefbuiltin @defbuiltin{bool __is_empty (@var{type})} -If @code{__is_class (type)} is @code{false} then the trait is @code{false}. -Otherwise @var{type} is considered empty if and only if: @var{type} +If @code{__is_class (type)} is @code{false}, then the trait is @code{false}. +Otherwise, @var{type} is considered empty if and only if: @var{type} has no non-static data members, or all non-static data members, if any, are bit-fields of length 0, and @var{type} has no virtual members, and @var{type} has no virtual base classes, and @var{type} @@ -29614,9 +29668,11 @@ has no base classes @var{base_type} for which Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@anchor{__is_enum} @defbuiltin{bool __is_enum (@var{type})} -If @var{type} is a cv enumeration type ([basic.compound]) the trait is +If @var{type} is a cv enumeration type ([basic.compound]), then the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_scoped_enum}. @enddefbuiltin @defbuiltin{bool __is_final (@var{type})} @@ -29625,48 +29681,254 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_function (@var{type})} +If @var{type} is a function type ([dcl.fct]), then the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + +@defbuiltin{bool __is_layout_compatible (@var{type1}, @var{type2})} +If @var{type1} and @var{type2} are layout-compatible ([basic.types]), then +the trait is @code{true}, else it is @code{false}. +Requires: @var{type1} and @var{type2} shall be complete types, (possibly +cv-qualified) @code{void}, or arrays of unknown bound. +@enddefbuiltin + @defbuiltin{bool __is_literal_type (@var{type})} -If @var{type} is a literal type ([basic.types]) the trait is +If @var{type} is a literal type ([basic.types]), then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@anchor{__is_member_function_pointer} +@defbuiltin{bool __is_member_function_pointer (@var{type})} +If @var{type} is a pointer to member function type ([dcl.mptr]), then +the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_member_object_pointer}, @ref{__is_member_pointer}. +@enddefbuiltin + +@anchor{__is_member_object_pointer} +@defbuiltin{bool __is_member_object_pointer (@var{type})} +If @var{type} is a pointer to member object type ([dcl.mptr]), then +the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_member_function_pointer}, @ref{__is_member_pointer}. +@enddefbuiltin + +@anchor{__is_member_pointer} +@defbuiltin{bool __is_member_pointer (@var{type})} +If @var{type} is a pointer to member type ([dcl.mptr]), then the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_member_function_pointer}, @ref{__is_member_object_pointer}. +@enddefbuiltin + +@anchor{__is_nothrow_assignable} +@defbuiltin{bool __is_nothrow_assignable (@var{type1}, @var{type2})} +If @code{__is_assignable (type1, type2)} is @code{true} and the assignment +operation does not throw an exception, then the trait is @code{true}, else +it is @code{false}. +Requires: Each of @var{type1} or @var{type2} being a class type +shall be a complete type. +See also: @ref{__is_assignable}, @ref{__is_trivially_assignable}. +@enddefbuiltin + +@anchor{__is_nothrow_constructible} +@defbuiltin{bool __is_nothrow_constructible (@var{type}, @var{arg_types}...)} +If @code{__is_constructible (type, arg_types...)} is @code{true} and the +construction does not throw an exception, then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{type} or @var{arg_types}... being a class type +shall be a complete type. +See also: @ref{__is_constructible}, @ref{__is_trivially_constructible}. +@enddefbuiltin + +@anchor{__is_nothrow_convertible} +@defbuiltin{bool __is_nothrow_convertible (@var{from_type}, @var{to_type})} +If @code{__is_convertible (from_type, to_type)} is @code{true} and the +conversion does not throw an exception, then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{from_type} or @var{to_type} being a class type +shall be a complete type. +See also: @ref{__is_convertible}. +@enddefbuiltin + +@defbuiltin{bool __is_object (@var{type})} +If @var{type} is an object type ([basic.types]), then the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + +@defbuiltin{bool __is_pointer_interconvertible_base_of (@var{base_type}, @var{derived_type})} +If @var{base_type} and @var{derived_type} are pointer-interconvertible +([conv.ptr]) and @var{base_type} is a base class of @var{derived_type} +([class.derived]), then the trait is @code{true}, else it is @code{false}. +Requires: if @code{__is_class (base_type)} and @code{__is_class (derived_type)} +are @code{true} and @var{base_type} and @var{derived_type} are not the same +type (disregarding cv-qualifiers), @var{derived_type} shall be a complete +type. A diagnostic is produced if this requirement is not met. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} -If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, +If @var{type} is a cv POD type ([basic.types]), then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin @defbuiltin{bool __is_polymorphic (@var{type})} -If @var{type} is a polymorphic class ([class.virtual]) then the trait +If @var{type} is a polymorphic class ([class.virtual]), then the trait is @code{true}, else it is @code{false}. Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_reference (@var{type})} +If @var{type} is a reference type ([dcl.ref]), then the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + +@defbuiltin{bool __is_same (@var{type1}, @var{type2})} +If @var{type1} and @var{type2} refer to the same type, then the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + +@anchor{__is_scoped_enum} +@defbuiltin{bool __is_scoped_enum (@var{type})} +If @var{type} is a scoped enumeration type ([dcl.enum]), then the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_enum}. +@enddefbuiltin + @defbuiltin{bool __is_standard_layout (@var{type})} -If @var{type} is a standard-layout type ([basic.types]) the trait is +If @var{type} is a standard-layout type ([basic.types]), then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, an array of complete types, or (possibly cv-qualified) @code{void}. @enddefbuiltin +@anchor{__is_trivial} @defbuiltin{bool __is_trivial (@var{type})} -If @var{type} is a trivial type ([basic.types]) the trait is +If @var{type} is a trivial type ([basic.types]), then the trait is @code{true}, else it is @code{false}. Requires: @var{type} shall be a complete type, an array of complete types, or (possibly cv-qualified) @code{void}. +See also: @ref{__is_trivially_assignable}, @ref{__is_trivially_constructible}, +@ref{__is_trivially_copyable}. +@enddefbuiltin + +@anchor{__is_trivially_assignable} +@defbuiltin{bool __is_trivially_assignable (@var{type1}, @var{type2})} +If @code{__is_assignable (type1, type2)} is @code{true} and +@code{__is_trivial (type1)} is @code{true}, then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{type1} or @var{type2} being a class type +shall be a complete type. +See also: @ref{__is_trivial}, @ref{__is_assignable}, +@ref{__is_nothrow_assignable}. +@enddefbuiltin + +@anchor{__is_trivially_constructible} +@defbuiltin{bool __is_trivially_constructible (@var{type}, @var{arg_types}...)} +If @code{__is_constructible (type, arg_types...)} is @code{true} and +@code{__is_trivial (type)} is @code{true}, then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{type} or @var{arg_types}... being a class type +shall be a complete type. +See also: @ref{__is_trivial}, @ref{__is_constructible}, +@ref{__is_nothrow_constructible}. +@enddefbuiltin + +@anchor{__is_trivially_copyable} +@defbuiltin{bool __is_trivially_copyable (@var{type})} +If @var{type} is a trivially copyable type ([basic.types]), then the trait is +@code{true}, else it is @code{false}. +Requires: @var{type} shall be a complete type, an array of complete types, +or (possibly cv-qualified) @code{void}. +See also: @ref{__is_trivial}. @enddefbuiltin @defbuiltin{bool __is_union (@var{type})} -If @var{type} is a cv union type ([basic.compound]) the trait is +If @var{type} is a cv union type ([basic.compound]), then the trait is @code{true}, else it is @code{false}. @enddefbuiltin -@defbuiltin{bool __underlying_type (@var{type})} -The underlying type of @var{type}. -Requires: @var{type} shall be an enumeration type ([dcl.enum]). +@anchor{__reference_constructs_from_temporary} +@defbuiltin{bool __reference_constructs_from_temporary (@var{type1}, @var{type2})} +If @var{type1} is a reference type and a value of type @var{type2} can be +bound to @var{type1} in direct-initialization, such that a temporary object +would be bound to the reference, then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{type1} or @var{type2} being a class type shall be +a complete type. +See also: @ref{__reference_converts_from_temporary} +@enddefbuiltin + +@anchor{__reference_converts_from_temporary} +@defbuiltin{bool __reference_converts_from_temporary (@var{type1}, @var{type2})} +If @var{type1} is a reference type and a value of type @var{type2} can be +bound to @var{type1} in copy-initialization, such that a temporary object +would be bound to the reference, then the trait is @code{true}, +else it is @code{false}. +Requires: Each of @var{type1} or @var{type2} being a class type shall be +a complete type. +See also: @ref{__reference_constructs_from_temporary} +@enddefbuiltin + + +@subsection Type-yielding Type Traits + +Most of these built-ins return a type when invoked; the rest yields +a list of types. + +@anchor{__bases} +@defbuiltin{@var{types}... __bases (@var{type})} +If @var{type} is a class type ([class.derived]), then the trait is a +typelist of the base classes of @var{type}, else it is an empty typelist. +See also: @ref{__direct_bases}. +@enddefbuiltin + +@anchor{__direct_bases} +@defbuiltin{@var{types}... __direct_bases (@var{type})} +If @var{type} is a class type ([class.derived]), then the trait is a +typelist of the direct base classes of @var{type}, else it is an empty +typelist. +See also: @ref{__bases}. +@enddefbuiltin + +@anchor{__remove_cv} +@defbuiltin{@var{type} __remove_cv (@var{cv_type})} +If @var{cv_type} is a cv-qualified type ([basic.type.qualifier]), then the +trait is the type @var{type} of @var{cv_type} with its top-level cv-qualifiers +removed, else it is @var{cv_type}. +See also: @ref{__remove_cvref} +@enddefbuiltin + +@anchor{__remove_cvref} +@defbuiltin{@var{type} __remove_cvref (@var{cvref_type})} +If @var{cvref_type} is a cv-qualified ([basic.type.qualifier]) or reference +type ([dcl.ref]), then the trait is the type @var{type} of +@var{cvref_type} with its top-level cv-qualifiers and reference removed, +else it is @var{cvref_type}. +See also: @ref{__remove_cv}, @ref{__remove_reference}. +@enddefbuiltin + +@defbuiltin{@var{type} __remove_pointer (@var{ptr_type})} +If @var{ptr_type} is a pointer type ([dcl.ptr]), then the trait is the +@var{type} pointed to by @var{ptr_type}, else it is @var{ptr_type}. +@enddefbuiltin + +@anchor{__remove_reference} +@defbuiltin{@var{type} __remove_reference (@var{ref_type})} +If @var{ref_type} is a reference type ([dcl.ref]), then the trait is the +@var{type} referred to by @var{ref_type}, else it is @var{ref_type}. +See also: @ref{__remove_cvref} +@enddefbuiltin + +@defbuiltin{@var{type} __type_pack_element (int @var{index}, @var{types}...)} +If @code{0 < @var{index} < sizeof...(@var{types})}, then the trait is the +@var{index}-th type in the pack @var{types}..., else it emits an error. +@enddefbuiltin + +@defbuiltin{@var{type} __underlying_type (@var{enum_type})} +If @var{enum_type} is a complete enumeration type ([dcl.enum]), then +the trait is the underlying type of @var{enum_type}, else it emits an error. @enddefbuiltin @@ -29708,15 +29970,6 @@ Introduces constraints on template arguments or requirements for a member function of a class template. @end table -The front end also exposes a number of internal mechanism that can be used -to simplify the writing of type traits. Note that some of these traits are -likely to be removed in the future. - -@defbuiltin{bool __is_same (@var{type1}, @var{type2})} -A binary type trait: @code{true} whenever the @var{type1} and -@var{type2} refer to the same type. -@enddefbuiltin - @node Deprecated Features @section Deprecated Features -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 02/12] extend.texi: Add documentation for __is_array 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (12 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 01/12] extend.texi: Arrange pre-existing " Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 03/12] extend.texi: Add documentation for __is_bounded_array Ken Matsui ` (9 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_array): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index b13f9d6f934..5aeb9bdd47a 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29579,6 +29579,11 @@ If @var{type} is an aggregate type ([dcl.init.aggr]) the trait is Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_array (@var{type})} +If @var{type} is an array type ([dcl.array]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_base_of (@var{base_type}, @var{derived_type})} If @var{base_type} is a base class of @var{derived_type} ([class.derived]) then the trait is @code{true}, otherwise it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 03/12] extend.texi: Add documentation for __is_bounded_array 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (13 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 02/12] extend.texi: Add documentation for __is_array Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 04/12] extend.texi: Add documentation for __is_function Ken Matsui ` (8 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_bounded_array): New documentation. (__is_array): Add @anchor to get linked from __is_bounded_array. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 5aeb9bdd47a..ae06e4da022 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29579,9 +29579,11 @@ If @var{type} is an aggregate type ([dcl.init.aggr]) the trait is Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@anchor{__is_array} @defbuiltin{bool __is_array (@var{type})} If @var{type} is an array type ([dcl.array]) the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_bounded_array}. @enddefbuiltin @defbuiltin{bool __is_base_of (@var{base_type}, @var{derived_type})} @@ -29596,6 +29598,13 @@ type (disregarding cv-qualifiers), @var{derived_type} shall be a complete type. A diagnostic is produced if this requirement is not met. @enddefbuiltin +@anchor{__is_bounded_array} +@defbuiltin{bool __is_bounded_array (@var{type})} +If @var{type} is an array type of known bound ([dcl.array]) +the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_array}. +@enddefbuiltin + @defbuiltin{bool __is_class (@var{type})} If @var{type} is a cv-qualified class type, and not a union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 04/12] extend.texi: Add documentation for __is_function 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (14 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 03/12] extend.texi: Add documentation for __is_bounded_array Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 05/12] extend.texi: Add documentation for __is_member_function_pointer Ken Matsui ` (7 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_function): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index ae06e4da022..a94ad7955fe 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29632,6 +29632,11 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_function (@var{type})} +If @var{type} is a function type ([dcl.fct]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + @c FIXME Commented out for GCC 13, discuss user interface for GCC 14. @c @defbuiltin{bool __is_deducible (@var{template}, @var{type})} @c If template arguments for @code{template} can be deduced from -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 05/12] extend.texi: Add documentation for __is_member_function_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (15 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 04/12] extend.texi: Add documentation for __is_function Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 06/12] extend.texi: Add documentation for __is_member_object_pointer Ken Matsui ` (6 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_member_function_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index a94ad7955fe..f08574318d0 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29650,6 +29650,11 @@ Requires: @var{type} shall be a complete type, (possibly cv-qualified) @code{void}, or an array of unknown bound. @enddefbuiltin +@defbuiltin{bool __is_member_function_pointer (@var{type})} +If @var{type} is a pointer to member function type ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 06/12] extend.texi: Add documentation for __is_member_object_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (16 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 05/12] extend.texi: Add documentation for __is_member_function_pointer Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 07/12] extend.texi: Add documentation for __is_member_pointer Ken Matsui ` (5 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_member_object_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index f08574318d0..7644ea5b80b 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29655,6 +29655,11 @@ If @var{type} is a pointer to member function type ([dcl.mptr]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_member_object_pointer (@var{type})} +If @var{type} is a pointer to member object type ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 07/12] extend.texi: Add documentation for __is_member_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (17 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 06/12] extend.texi: Add documentation for __is_member_object_pointer Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 08/12] extend.texi: Add documentation for __is_object Ken Matsui ` (4 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_member_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 7644ea5b80b..86ac0c7ed07 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29660,6 +29660,11 @@ If @var{type} is a pointer to member object type ([dcl.mptr]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_member_pointer (@var{type})} +If @var{type} is a pointer to member type ([dcl.mptr]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 08/12] extend.texi: Add documentation for __is_object 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (18 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 07/12] extend.texi: Add documentation for __is_member_pointer Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 09/12] extend.texi: Add documentation for __is_reference Ken Matsui ` (3 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_object): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 86ac0c7ed07..293eb5706f9 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29665,6 +29665,11 @@ If @var{type} is a pointer to member type ([dcl.mptr]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{bool __is_object (@var{type})} +If @var{type} is an object type ([basic.types]) the trait is +@code{true}, else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_pod (@var{type})} If @var{type} is a cv POD type ([basic.types]) then the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 09/12] extend.texi: Add documentation for __is_reference 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (19 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 08/12] extend.texi: Add documentation for __is_object Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 10/12] extend.texi: Add documentation for __is_scoped_enum Ken Matsui ` (2 subsequent siblings) 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_reference): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 293eb5706f9..6af5294c7b0 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29683,6 +29683,11 @@ is @code{true}, else it is @code{false}. Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@defbuiltin{bool __is_reference (@var{type})} +If @var{type} is a reference type ([dcl.ref]) the trait is @code{true}, +else it is @code{false}. +@enddefbuiltin + @defbuiltin{bool __is_standard_layout (@var{type})} If @var{type} is a standard-layout type ([basic.types]) the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 10/12] extend.texi: Add documentation for __is_scoped_enum 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (20 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 09/12] extend.texi: Add documentation for __is_reference Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 11/12] extend.texi: Add documentation for __remove_pointer Ken Matsui 2024-03-14 7:22 ` [PATCH v2 12/12] extend.texi: Add subsections for type- and expression-yielding traits Ken Matsui 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__is_scoped_enum): New documentation. (__is_enum): Add @anchor to get linked from __is_scoped_enum. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 6af5294c7b0..e4a4060be2b 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29621,9 +29621,11 @@ has no base classes @var{base_type} for which Requires: If @var{type} is a non-union class type, it shall be a complete type. @enddefbuiltin +@anchor{__is_enum} @defbuiltin{bool __is_enum (@var{type})} If @var{type} is a cv enumeration type ([basic.compound]) the trait is @code{true}, else it is @code{false}. +See also: @ref{__is_scoped_enum}. @enddefbuiltin @defbuiltin{bool __is_final (@var{type})} @@ -29688,6 +29690,13 @@ If @var{type} is a reference type ([dcl.ref]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@anchor{__is_scoped_enum} +@defbuiltin{bool __is_scoped_enum (@var{type})} +If @var{type} is a scoped enumeration type ([dcl.enum]) the trait is +@code{true}, else it is @code{false}. +See also: @ref{__is_enum}. +@enddefbuiltin + @defbuiltin{bool __is_standard_layout (@var{type})} If @var{type} is a standard-layout type ([basic.types]) the trait is @code{true}, else it is @code{false}. -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 11/12] extend.texi: Add documentation for __remove_pointer 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (21 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 10/12] extend.texi: Add documentation for __is_scoped_enum Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 12/12] extend.texi: Add subsections for type- and expression-yielding traits Ken Matsui 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (__remove_pointer): New documentation. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index e4a4060be2b..10ddf50182d 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29716,6 +29716,11 @@ If @var{type} is a cv union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin +@defbuiltin{@var{type} __remove_pointer (@var{ptr_type})} +If @var{ptr_type} is a pointer type ([dcl.ptr]) then the trait is the +@var{type} pointed to by @var{ptr_type}, else it is @var{ptr_type}. +@enddefbuiltin + @defbuiltin{bool __underlying_type (@var{type})} The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
* [PATCH v2 12/12] extend.texi: Add subsections for type- and expression-yielding traits 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui ` (22 preceding siblings ...) 2024-03-14 7:22 ` [PATCH v2 11/12] extend.texi: Add documentation for __remove_pointer Ken Matsui @ 2024-03-14 7:22 ` Ken Matsui 23 siblings, 0 replies; 30+ messages in thread From: Ken Matsui @ 2024-03-14 7:22 UTC (permalink / raw) To: gcc-patches; +Cc: jason, ppalka, Ken Matsui gcc/ChangeLog: * doc/extend.texi (Expression-yielding Type Traits): New subsection. (Type-yielding Type Traits): Likewise. (__remove_pointer): Move under the Type-yielding Type Traits subsection. Signed-off-by: Ken Matsui <kmatsui@gcc.gnu.org> --- gcc/doc/extend.texi | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 10ddf50182d..5d0afbe9611 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -29488,6 +29488,11 @@ compile-time determination of various characteristics of a type (or of a pair of types). +@subsection Expression-yielding Type Traits + +These built-in traits yield an expression of type @code{bool} +or @code{size_t}. + @defbuiltin{bool __has_nothrow_assign (@var{type})} If @var{type} is @code{const}-qualified or is a reference type then the trait is @code{false}. Otherwise if @code{__has_trivial_assign (type)} @@ -29716,16 +29721,19 @@ If @var{type} is a cv union type ([basic.compound]) the trait is @code{true}, else it is @code{false}. @enddefbuiltin -@defbuiltin{@var{type} __remove_pointer (@var{ptr_type})} -If @var{ptr_type} is a pointer type ([dcl.ptr]) then the trait is the -@var{type} pointed to by @var{ptr_type}, else it is @var{ptr_type}. -@enddefbuiltin - @defbuiltin{bool __underlying_type (@var{type})} The underlying type of @var{type}. Requires: @var{type} shall be an enumeration type ([dcl.enum]). @enddefbuiltin +@subsection Type-yielding Type Traits + +These built-in traits yield a type. + +@defbuiltin{@var{type} __remove_pointer (@var{ptr_type})} +If @var{ptr_type} is a pointer type ([dcl.ptr]) then the trait is the +@var{type} pointed to by @var{ptr_type}, else it is @var{ptr_type}. +@enddefbuiltin @node C++ Concepts @section C++ Concepts -- 2.44.0 ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2024-03-16 9:49 UTC | newest] Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-03-02 0:22 [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui 2024-03-02 0:22 ` [PATCH 02/11] gcc/doc/extend.texi: Add documentation for __is_array Ken Matsui 2024-03-02 0:22 ` [PATCH 03/11] gcc/doc/extend.texi: Add documentation for __is_bounded_array Ken Matsui 2024-03-02 0:22 ` [PATCH 04/11] gcc/doc/extend.texi: Add documentation for __is_function Ken Matsui 2024-03-02 0:22 ` [PATCH 05/11] gcc/doc/extend.texi: Add documentation for __is_member_function_pointer Ken Matsui 2024-03-02 0:22 ` [PATCH 06/11] gcc/doc/extend.texi: Add documentation for __is_member_object_pointer Ken Matsui 2024-03-02 0:22 ` [PATCH 07/11] gcc/doc/extend.texi: Add documentation for __is_member_pointer Ken Matsui 2024-03-02 0:22 ` [PATCH 08/11] gcc/doc/extend.texi: Add documentation for __is_object Ken Matsui 2024-03-02 0:22 ` [PATCH 09/11] gcc/doc/extend.texi: Add documentation for __is_reference Ken Matsui 2024-03-02 0:22 ` [PATCH 10/11] gcc/doc/extend.texi: Add documentation for __is_scoped_enum Ken Matsui 2024-03-02 0:22 ` [PATCH 11/11] gcc/doc/extend.texi: Add documentation for __remove_pointer Ken Matsui 2024-03-02 16:00 ` [PATCH 01/11] gcc/doc/extend.texi: Sort built-in traits alphabetically Ken Matsui 2024-03-08 16:38 ` Patrick Palka 2024-03-08 17:46 ` Ken Matsui 2024-03-14 7:22 ` [PATCH v2 01/12] extend.texi: Arrange pre-existing " Ken Matsui 2024-03-14 7:38 ` Ken Matsui 2024-03-15 7:20 ` [PATCH v3 1/2] " Ken Matsui 2024-03-15 7:20 ` [PATCH v3 2/2] extend.texi: Add documentation for all missing built-in traits [PR87343] Ken Matsui 2024-03-16 9:47 ` [PATCH v4 " Ken Matsui 2024-03-14 7:22 ` [PATCH v2 02/12] extend.texi: Add documentation for __is_array Ken Matsui 2024-03-14 7:22 ` [PATCH v2 03/12] extend.texi: Add documentation for __is_bounded_array Ken Matsui 2024-03-14 7:22 ` [PATCH v2 04/12] extend.texi: Add documentation for __is_function Ken Matsui 2024-03-14 7:22 ` [PATCH v2 05/12] extend.texi: Add documentation for __is_member_function_pointer Ken Matsui 2024-03-14 7:22 ` [PATCH v2 06/12] extend.texi: Add documentation for __is_member_object_pointer Ken Matsui 2024-03-14 7:22 ` [PATCH v2 07/12] extend.texi: Add documentation for __is_member_pointer Ken Matsui 2024-03-14 7:22 ` [PATCH v2 08/12] extend.texi: Add documentation for __is_object Ken Matsui 2024-03-14 7:22 ` [PATCH v2 09/12] extend.texi: Add documentation for __is_reference Ken Matsui 2024-03-14 7:22 ` [PATCH v2 10/12] extend.texi: Add documentation for __is_scoped_enum Ken Matsui 2024-03-14 7:22 ` [PATCH v2 11/12] extend.texi: Add documentation for __remove_pointer Ken Matsui 2024-03-14 7:22 ` [PATCH v2 12/12] extend.texi: Add subsections for type- and expression-yielding traits Ken Matsui
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).