summaryrefslogtreecommitdiff
path: root/devdocs/gcc~13/type-traits.html
diff options
context:
space:
mode:
Diffstat (limited to 'devdocs/gcc~13/type-traits.html')
-rw-r--r--devdocs/gcc~13/type-traits.html75
1 files changed, 75 insertions, 0 deletions
diff --git a/devdocs/gcc~13/type-traits.html b/devdocs/gcc~13/type-traits.html
new file mode 100644
index 00000000..d253e803
--- /dev/null
+++ b/devdocs/gcc~13/type-traits.html
@@ -0,0 +1,75 @@
+<div class="section-level-extent" id="Type-Traits"> <div class="nav-panel"> <p> Next: <a href="c_002b_002b-concepts" accesskey="n" rel="next">C++ Concepts</a>, Previous: <a href="function-multiversioning" accesskey="p" rel="prev">Function Multiversioning</a>, Up: <a href="c_002b_002b-extensions" accesskey="u" rel="up">Extensions to the C++ Language</a> [<a href="index#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="indices" title="Index" rel="index">Index</a>]</p> </div> <h1 class="section" id="Type-Traits-1"><span>7.9 Type Traits<a class="copiable-link" href="#Type-Traits-1"> ¶</a></span></h1> <p>The C++ front end implements syntactic extensions that allow compile-time determination of various characteristics of a type (or of a pair of types). </p> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005fnothrow_005fassign">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_nothrow_assign</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005fnothrow_005fassign"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is <code class="code">const</code>-qualified or is a reference type then the trait is <code class="code">false</code>. Otherwise if <code class="code">__has_trivial_assign (type)</code> is <code class="code">true</code> then the trait is <code class="code">true</code>, else if <var class="var">type</var> 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 class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005fnothrow_005fcopy">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_nothrow_copy</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005fnothrow_005fcopy"> ¶</a></span>
+</dt> <dd><p>If <code class="code">__has_trivial_copy (type)</code> is <code class="code">true</code> then the trait is <code class="code">true</code>, else if <var class="var">type</var> is a cv-qualified class or union type with copy constructors that are known not to throw an exception then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005fnothrow_005fconstructor">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_nothrow_constructor</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005fnothrow_005fconstructor"> ¶</a></span>
+</dt> <dd><p>If <code class="code">__has_trivial_constructor (type)</code> is <code class="code">true</code> then the trait is <code class="code">true</code>, else if <var class="var">type</var> 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 class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005ftrivial_005fassign">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_trivial_assign</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005ftrivial_005fassign"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is <code class="code">const</code>- qualified or is a reference type then the trait is <code class="code">false</code>. Otherwise if <code class="code">__is_trivial (type)</code> is <code class="code">true</code> then the trait is <code class="code">true</code>, else if <var class="var">type</var> is a cv-qualified class or union type with a trivial copy assignment ([class.copy]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005ftrivial_005fcopy">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_trivial_copy</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005ftrivial_005fcopy"> ¶</a></span>
+</dt> <dd><p>If <code class="code">__is_trivial (type)</code> is <code class="code">true</code> or <var class="var">type</var> is a reference type then the trait is <code class="code">true</code>, else if <var class="var">type</var> is a cv class or union type with a trivial copy constructor ([class.copy]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005ftrivial_005fconstructor">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_trivial_constructor</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005ftrivial_005fconstructor"> ¶</a></span>
+</dt> <dd><p>If <code class="code">__is_trivial (type)</code> is <code class="code">true</code> then the trait is <code class="code">true</code>, else if <var class="var">type</var> is a cv-qualified class or union type (or array thereof) with a trivial default constructor ([class.ctor]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005ftrivial_005fdestructor">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_trivial_destructor</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005ftrivial_005fdestructor"> ¶</a></span>
+</dt> <dd><p>If <code class="code">__is_trivial (type)</code> is <code class="code">true</code> or <var class="var">type</var> is a reference type then the trait is <code class="code">true</code>, else if <var class="var">type</var> is a cv class or union type (or array thereof) with a trivial destructor ([class.dtor]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fhas_005fvirtual_005fdestructor">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__has_virtual_destructor</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fhas_005fvirtual_005fdestructor"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a class type with a virtual destructor ([class.dtor]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: If <var class="var">type</var> is a non-union class type, it shall be a complete type. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fabstract">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_abstract</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fabstract"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is an abstract class ([class.abstract]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: If <var class="var">type</var> is a non-union class type, it shall be a complete type. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005faggregate">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_aggregate</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005faggregate"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is an aggregate type ([dcl.init.aggr]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: If <var class="var">type</var> is a class type, it shall be a complete type. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fbase_005fof">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_base_of</strong> <code class="def-code-arguments">(<var class="var">base_type</var>, <var class="var">derived_type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fbase_005fof"> ¶</a></span>
+</dt> <dd><p>If <var class="var">base_type</var> is a base class of <var class="var">derived_type</var> ([class.derived]) then the trait is <code class="code">true</code>, otherwise it is <code class="code">false</code>. Top-level cv-qualifications of <var class="var">base_type</var> and <var class="var">derived_type</var> are ignored. For the purposes of this trait, a class type is considered is own base. Requires: if <code class="code">__is_class (base_type)</code> and <code class="code">__is_class (derived_type)</code> are <code class="code">true</code> and <var class="var">base_type</var> and <var class="var">derived_type</var> are not the same type (disregarding cv-qualifiers), <var class="var">derived_type</var> shall be a complete type. A diagnostic is produced if this requirement is not met. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fclass">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_class</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fclass"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a cv-qualified class type, and not a union type ([basic.compound]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fempty">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_empty</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fempty"> ¶</a></span>
+</dt> <dd><p>If <code class="code">__is_class (type)</code> is <code class="code">false</code> then the trait is <code class="code">false</code>. Otherwise <var class="var">type</var> is considered empty if and only if: <var class="var">type</var> has no non-static data members, or all non-static data members, if any, are bit-fields of length 0, and <var class="var">type</var> has no virtual members, and <var class="var">type</var> has no virtual base classes, and <var class="var">type</var> has no base classes <var class="var">base_type</var> for which <code class="code">__is_empty (base_type)</code> is <code class="code">false</code>. Requires: If <var class="var">type</var> is a non-union class type, it shall be a complete type. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fenum">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_enum</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fenum"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a cv enumeration type ([basic.compound]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005ffinal">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_final</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005ffinal"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a class or union type marked <code class="code">final</code>, then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: If <var class="var">type</var> is a class type, it shall be a complete type. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fliteral_005ftype">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_literal_type</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fliteral_005ftype"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a literal type ([basic.types]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fpod">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_pod</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fpod"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a cv POD type ([basic.types]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, (possibly cv-qualified) <code class="code">void</code>, or an array of unknown bound. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fpolymorphic">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_polymorphic</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fpolymorphic"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a polymorphic class ([class.virtual]) then the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: If <var class="var">type</var> is a non-union class type, it shall be a complete type. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005fstandard_005flayout">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_standard_layout</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005fstandard_005flayout"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a standard-layout type ([basic.types]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, an array of complete types, or (possibly cv-qualified) <code class="code">void</code>. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005ftrivial">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_trivial</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005ftrivial"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a trivial type ([basic.types]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. Requires: <var class="var">type</var> shall be a complete type, an array of complete types, or (possibly cv-qualified) <code class="code">void</code>. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005fis_005funion">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__is_union</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005fis_005funion"> ¶</a></span>
+</dt> <dd><p>If <var class="var">type</var> is a cv union type ([basic.compound]) the trait is <code class="code">true</code>, else it is <code class="code">false</code>. </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005funderlying_005ftype">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__underlying_type</strong> <code class="def-code-arguments">(<var class="var">type</var>)</code><a class="copiable-link" href="#index-_005f_005funderlying_005ftype"> ¶</a></span>
+</dt> <dd><p>The underlying type of <var class="var">type</var>. Requires: <var class="var">type</var> shall be an enumeration type ([dcl.enum]). </p></dd>
+</dl> <dl class="first-deftypefn"> <dt class="deftypefn" id="index-_005f_005finteger_005fpack">
+<span class="category-def">Built-in Function: </span><span><code class="def-type">bool</code> <strong class="def-name">__integer_pack</strong> <code class="def-code-arguments">(<var class="var">length</var>)</code><a class="copiable-link" href="#index-_005f_005finteger_005fpack"> ¶</a></span>
+</dt> <dd><p>When used as the pattern of a pack expansion within a template definition, expands to a template argument pack containing integers from <code class="code">0</code> to <code class="code"><var class="var">length</var>-1</code>. This is provided for efficient implementation of <code class="code">std::make_integer_sequence</code>. </p></dd>
+</dl> </div> <div class="nav-panel"> <p> Next: <a href="c_002b_002b-concepts">C++ Concepts</a>, Previous: <a href="function-multiversioning">Function Multiversioning</a>, Up: <a href="c_002b_002b-extensions">Extensions to the C++ Language</a> [<a href="index#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="indices" title="Index" rel="index">Index</a>]</p> </div><div class="_attribution">
+ <p class="_attribution-p">
+ &copy; Free Software Foundation<br>Licensed under the GNU Free Documentation License, Version 1.3.<br>
+ <a href="https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Type-Traits.html" class="_attribution-link">https://gcc.gnu.org/onlinedocs/gcc-13.1.0/gcc/Type-Traits.html</a>
+ </p>
+</div>