"Fossies" - the Fresh Open Source Software Archive

Member "dmd2/html/d/phobos/std_traits.html" (20 Nov 2020, 379004 Bytes) of package /linux/misc/dmd.2.094.2.linux.tar.xz:


The requested HTML page contains a <FORM> tag that is unusable on "Fossies" in "automatic" (rendered) mode so that page is shown as HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 <!DOCTYPE html>
    3 <html lang="en-US">
    4 <!--
    5     Copyright (c) 1999-2020 by the D Language Foundation
    6     All Rights Reserved.
    7     https://dlang.org/foundation_overview.html
    8   -->
    9 <head>
   10 <meta charset="utf-8">
   11 <meta name="keywords" content="D programming language">
   12 <meta name="description" content="D Programming Language">
   13 <title>std.traits - D Programming Language</title>
   14 
   15 <link rel="stylesheet" href="../css/codemirror.css">
   16 <link rel="stylesheet" href="../css/style.css">
   17 <link rel="stylesheet" href="../css/print.css" media="print">
   18 <link rel="shortcut icon" href="../favicon.ico">
   19 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.1, maximum-scale=10.0">
   20 
   21 </head>
   22 <body id='std.traits' class='std'>
   23 <script type="text/javascript">document.body.className += ' have-javascript'</script>
   24 <div id="top"><div class="helper"><div class="helper expand-container">    <div class="logo"><a href=".."><img id="logo" alt="D Logo" src="../images/dlogo.svg"></a></div>
   25     <a href="../menu.html" title="Menu" class="hamburger expand-toggle"><span>Menu</span></a>
   26     
   27 <div id="cssmenu"><ul>    <li><a href='https://tour.dlang.org'><span>Learn</span></a></li>
   28     <li class='expand-container'><a class='expand-toggle' href='../documentation.html'><span>Documentation</span></a>
   29       
   30 <ul class='expand-content'>    <li><a href='../spec/spec.html'>Language Reference</a></li>
   31     <li><a href='../phobos/index.html'>Library Reference</a></li>
   32     <li><a href='../dmd.html'>Command-line Reference</a></li>
   33     <li class="menu-divider"><a href='../comparison.html'>Feature Overview</a></li>
   34     <li><a href='../articles.html'>Articles</a></li>
   35  </ul></li>
   36     <li><a href='../download.html'><span>Downloads</span></a></li>
   37     <li><a href='https://code.dlang.org'><span>Packages</span></a></li>
   38     <li class='expand-container'><a class='expand-toggle' href='../community.html'><span>Community</span></a>
   39       
   40 <ul class='expand-content'>    <li><a href='https://dlang.org/blog'>Blog</a></li>
   41     <li><a href='../orgs-using-d.html'>Orgs using D</a></li>
   42     <li><a href='https://twitter.com/search?q=%23dlang'>Twitter</a></li>
   43     <li><a href='../calendar.html'>Calendar</a></li>
   44     <li class="menu-divider"><a href='https://forum.dlang.org'>Forums</a></li>
   45     <li><a href='irc://irc.freenode.net/d'>IRC</a></li>
   46     <li><a href='https://discord.gg/bMZk9Q4'>Community Discord</a></li>
   47     <li><a href='https://wiki.dlang.org'>Wiki</a></li>
   48     <li class="menu-divider"><a href='https://github.com/dlang'>GitHub</a></li>
   49     <li><a href='../bugstats.html'>Issues</a></li>
   50     <li><a href='https://wiki.dlang.org/Get_involved'>Get involved</a></li>
   51     <li class="menu-divider"><a href='../foundation/contributors.html'>Contributors</a></li>
   52     <li><a href='../foundation/index.html'>Foundation</a></li>
   53     <li><a href='..//security.html'>Security Team</a></li>
   54     <li><a href='../foundation/donate.html'>Donate</a></li>
   55     <li><a href='../foundation/sponsors.html'>Sponsors</a></li>
   56  </ul></li>
   57     <li class='expand-container'><a class='expand-toggle' href='../resources.html'><span>Resources</span></a>
   58       
   59 <ul class='expand-content'>    <li><a href='https://tour.dlang.org'>Tour</a></li>
   60     <li><a href='https://wiki.dlang.org/Books'>Books</a></li>
   61     <li><a href='https://wiki.dlang.org/Tutorials'>Tutorials</a></li>
   62     <li class="menu-divider"><a href='https://wiki.dlang.org/Development_tools'>Tools</a></li>
   63     <li><a href='https://wiki.dlang.org/Editors'>Editors</a></li>
   64     <li><a href='https://wiki.dlang.org/IDEs'>IDEs</a></li>
   65     <li><a href='https://run.dlang.io'>run.dlang.io</a></li>
   66     <li><a href='http://rainers.github.io/visuald/visuald/StartPage.html'>Visual D</a></li>
   67     <li class="menu-divider"><a href='../acknowledgements.html'>Acknowledgments</a></li>
   68     <li><a href='../dstyle.html'>D Style</a></li>
   69     <li><a href='../glossary.html'>Glossary</a></li>
   70     <li><a href='../sitemap.html'>Sitemap</a></li>
   71  </ul></li>
   72 </ul></div>
   73     <div class="search-container expand-container">        <a href="../search.html" class="expand-toggle" title="Search"><span>Search</span></a>
   74         
   75     <div id="search-box">        <form method="get" action="https://google.com/search">
   76             <input type="hidden" id="domains" name="domains" value="dlang.org">
   77             <input type="hidden" id="sourceid" name="sourceid" value="google-search">
   78             <span id="search-query"><input id="q" name="q" placeholder="Search"></span><span id="search-dropdown"><span class="helper">                <select id="sitesearch" name="sitesearch" size="1">
   79                     <option value="dlang.org">Entire Site</option>
   80                     <option  value="dlang.org/spec">Language</option>
   81                     <option selected value="dlang.org/phobos">Library</option>
   82                     <option  value="forum.dlang.org">Forums</option>
   83                     
   84                 </select>
   85             </span></span><span id="search-submit"><button type="submit"><i class="fa fa-search"></i><span>go</span></button></span>
   86         </form>
   87     </div>
   88     </div>
   89 </div></div></div>
   90 
   91 <div class="container">    
   92 <div class="subnav-helper"></div> <div class="subnav">    <div class="head">        <h2>Library Reference</h2>
   93         <p><span class="smallprint">version 2.094.2 <span class="separator"><br></span>
   94             </span>
   95         </p>
   96         <p><a href="index.html">overview</a></p>
   97     </div>
   98     <ul>
   99 
  100 <li><a href='object.html'><span><em class="tt">object</em></span></a></li>
  101 
  102 <li class='expand-container modlist-submenu-std'><a class='expand-toggle' href='#'><span><em class="tt">std</em></span></a>
  103 <ul><li>  <a href="std_algorithm.html" title="std.algorithm"><span class="d_inlinecode donthyphenate notranslate">algorithm</span></a><ul><li>    <a href="std_algorithm_comparison.html" title="std.algorithm.comparison"><span class="d_inlinecode donthyphenate notranslate">comparison</span></a></li><li>    <a href="std_algorithm_iteration.html" title="std.algorithm.iteration"><span class="d_inlinecode donthyphenate notranslate">iteration</span></a></li><li>    <a href="std_algorithm_mutation.html" title="std.algorithm.mutation"><span class="d_inlinecode donthyphenate notranslate">mutation</span></a></li><li>    <a href="std_algorithm_searching.html" title="std.algorithm.searching"><span class="d_inlinecode donthyphenate notranslate">searching</span></a></li><li>    <a href="std_algorithm_setops.html" title="std.algorithm.setops"><span class="d_inlinecode donthyphenate notranslate">setops</span></a></li><li>    <a href="std_algorithm_sorting.html" title="std.algorithm.sorting"><span class="d_inlinecode donthyphenate notranslate">sorting</span></a>
  104   </li></ul></li><li>  <a href="std_array.html" title="std.array"><span class="d_inlinecode donthyphenate notranslate">array</span></a></li><li>  <a href="std_ascii.html" title="std.ascii"><span class="d_inlinecode donthyphenate notranslate">ascii</span></a></li><li>  <a href="std_base64.html" title="std.base64"><span class="d_inlinecode donthyphenate notranslate">base64</span></a></li><li>  <a href="std_bigint.html" title="std.bigint"><span class="d_inlinecode donthyphenate notranslate">bigint</span></a></li><li>  <a href="std_bitmanip.html" title="std.bitmanip"><span class="d_inlinecode donthyphenate notranslate">bitmanip</span></a></li><li>  <a href="std_compiler.html" title="std.compiler"><span class="d_inlinecode donthyphenate notranslate">compiler</span></a></li><li>  <a href="std_complex.html" title="std.complex"><span class="d_inlinecode donthyphenate notranslate">complex</span></a></li><li>  <a href="std_concurrency.html" title="std.concurrency"><span class="d_inlinecode donthyphenate notranslate">concurrency</span></a></li><li>  <a href="std_container.html" title="std.container"><span class="d_inlinecode donthyphenate notranslate">container</span></a><ul><li>    <a href="std_container_array.html" title="std.container.array"><span class="d_inlinecode donthyphenate notranslate">array</span></a></li><li>    <a href="std_container_binaryheap.html" title="std.container.binaryheap"><span class="d_inlinecode donthyphenate notranslate">binaryheap</span></a></li><li>    <a href="std_container_dlist.html" title="std.container.dlist"><span class="d_inlinecode donthyphenate notranslate">dlist</span></a></li><li>    <a href="std_container_rbtree.html" title="std.container.rbtree"><span class="d_inlinecode donthyphenate notranslate">rbtree</span></a></li><li>    <a href="std_container_slist.html" title="std.container.slist"><span class="d_inlinecode donthyphenate notranslate">slist</span></a></li><li>    <a href="std_container_util.html" title="std.container.util"><span class="d_inlinecode donthyphenate notranslate">util</span></a>
  105   </li></ul></li><li>  <a href="std_conv.html" title="std.conv"><span class="d_inlinecode donthyphenate notranslate">conv</span></a></li><li>  <a href="std_csv.html" title="std.csv"><span class="d_inlinecode donthyphenate notranslate">csv</span></a></li><li>  <a href="std_datetime.html" title="std.datetime"><span class="d_inlinecode donthyphenate notranslate">datetime</span></a><ul><li>    <a href="std_datetime_date.html" title="std.datetime.date"><span class="d_inlinecode donthyphenate notranslate">date</span></a></li><li>    <a href="std_datetime_interval.html" title="std.datetime.interval"><span class="d_inlinecode donthyphenate notranslate">interval</span></a></li><li>    <a href="std_datetime_stopwatch.html" title="std.datetime.stopwatch"><span class="d_inlinecode donthyphenate notranslate">stopwatch</span></a></li><li>    <a href="std_datetime_systime.html" title="std.datetime.systime"><span class="d_inlinecode donthyphenate notranslate">systime</span></a></li><li>    <a href="std_datetime_timezone.html" title="std.datetime.timezone"><span class="d_inlinecode donthyphenate notranslate">timezone</span></a>
  106   </li></ul></li><li>  <a href="std_demangle.html" title="std.demangle"><span class="d_inlinecode donthyphenate notranslate">demangle</span></a></li><li>  <a href="std_digest.html" title="std.digest"><span class="d_inlinecode donthyphenate notranslate">digest</span></a><ul><li>    <a href="std_digest_crc.html" title="std.digest.crc"><span class="d_inlinecode donthyphenate notranslate">crc</span></a></li><li>    <a href="std_digest_hmac.html" title="std.digest.hmac"><span class="d_inlinecode donthyphenate notranslate">hmac</span></a></li><li>    <a href="std_digest_md.html" title="std.digest.md"><span class="d_inlinecode donthyphenate notranslate">md</span></a></li><li>    <a href="std_digest_murmurhash.html" title="std.digest.murmurhash"><span class="d_inlinecode donthyphenate notranslate">murmurhash</span></a></li><li>    <a href="std_digest_ripemd.html" title="std.digest.ripemd"><span class="d_inlinecode donthyphenate notranslate">ripemd</span></a></li><li>    <a href="std_digest_sha.html" title="std.digest.sha"><span class="d_inlinecode donthyphenate notranslate">sha</span></a>
  107   </li></ul></li><li>  <a href="std_encoding.html" title="std.encoding"><span class="d_inlinecode donthyphenate notranslate">encoding</span></a></li><li>  <a href="std_exception.html" title="std.exception"><span class="d_inlinecode donthyphenate notranslate">exception</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">experimental</span></h7><ul><li>    <a href="std_experimental_allocator.html" title="std.experimental.allocator"><span class="d_inlinecode donthyphenate notranslate">allocator</span></a><ul><li>      <a href="std_experimental_allocator_building_blocks.html" title="std.experimental.allocator.building_blocks"><span class="d_inlinecode donthyphenate notranslate">building_blocks</span></a><ul><li>        <a href="std_experimental_allocator_building_blocks_affix_allocator.html" title="std.experimental.allocator.building_blocks.affix_allocator"><span class="d_inlinecode donthyphenate notranslate">affix_allocator</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_aligned_block_list.html" title="std.experimental.allocator.building_blocks.aligned_block_list"><span class="d_inlinecode donthyphenate notranslate">aligned_block_list</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_allocator_list.html" title="std.experimental.allocator.building_blocks.allocator_list"><span class="d_inlinecode donthyphenate notranslate">allocator_list</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_ascending_page_allocator.html" title="std.experimental.allocator.building_blocks.ascending_page_allocator"><span class="d_inlinecode donthyphenate notranslate">ascending_page_allocator</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_bitmapped_block.html" title="std.experimental.allocator.building_blocks.bitmapped_block"><span class="d_inlinecode donthyphenate notranslate">bitmapped_block</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_bucketizer.html" title="std.experimental.allocator.building_blocks.bucketizer"><span class="d_inlinecode donthyphenate notranslate">bucketizer</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_fallback_allocator.html" title="std.experimental.allocator.building_blocks.fallback_allocator"><span class="d_inlinecode donthyphenate notranslate">fallback_allocator</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_free_list.html" title="std.experimental.allocator.building_blocks.free_list"><span class="d_inlinecode donthyphenate notranslate">free_list</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_free_tree.html" title="std.experimental.allocator.building_blocks.free_tree"><span class="d_inlinecode donthyphenate notranslate">free_tree</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_kernighan_ritchie.html" title="std.experimental.allocator.building_blocks.kernighan_ritchie"><span class="d_inlinecode donthyphenate notranslate">kernighan_ritchie</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_null_allocator.html" title="std.experimental.allocator.building_blocks.null_allocator"><span class="d_inlinecode donthyphenate notranslate">null_allocator</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_quantizer.html" title="std.experimental.allocator.building_blocks.quantizer"><span class="d_inlinecode donthyphenate notranslate">quantizer</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_region.html" title="std.experimental.allocator.building_blocks.region"><span class="d_inlinecode donthyphenate notranslate">region</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_scoped_allocator.html" title="std.experimental.allocator.building_blocks.scoped_allocator"><span class="d_inlinecode donthyphenate notranslate">scoped_allocator</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_segregator.html" title="std.experimental.allocator.building_blocks.segregator"><span class="d_inlinecode donthyphenate notranslate">segregator</span></a></li><li>        <a href="std_experimental_allocator_building_blocks_stats_collector.html" title="std.experimental.allocator.building_blocks.stats_collector"><span class="d_inlinecode donthyphenate notranslate">stats_collector</span></a>
  108       </li></ul></li><li>      <a href="std_experimental_allocator_common.html" title="std.experimental.allocator.common"><span class="d_inlinecode donthyphenate notranslate">common</span></a></li><li>      <a href="std_experimental_allocator_gc_allocator.html" title="std.experimental.allocator.gc_allocator"><span class="d_inlinecode donthyphenate notranslate">gc_allocator</span></a></li><li>      <a href="std_experimental_allocator_mallocator.html" title="std.experimental.allocator.mallocator"><span class="d_inlinecode donthyphenate notranslate">mallocator</span></a></li><li>      <a href="std_experimental_allocator_mmap_allocator.html" title="std.experimental.allocator.mmap_allocator"><span class="d_inlinecode donthyphenate notranslate">mmap_allocator</span></a></li><li>      <a href="std_experimental_allocator_showcase.html" title="std.experimental.allocator.showcase"><span class="d_inlinecode donthyphenate notranslate">showcase</span></a></li><li>      <a href="std_experimental_allocator_typed.html" title="std.experimental.allocator.typed"><span class="d_inlinecode donthyphenate notranslate">typed</span></a>
  109     </li></ul></li><li>    <a href="std_experimental_checkedint.html" title="std.experimental.checkedint"><span class="d_inlinecode donthyphenate notranslate">checkedint</span></a></li><li>    <a href="std_experimental_logger.html" title="std.experimental.logger"><span class="d_inlinecode donthyphenate notranslate">logger</span></a><ul><li>      <a href="std_experimental_logger_core.html" title="std.experimental.logger.core"><span class="d_inlinecode donthyphenate notranslate">core</span></a></li><li>      <a href="std_experimental_logger_filelogger.html" title="std.experimental.logger.filelogger"><span class="d_inlinecode donthyphenate notranslate">filelogger</span></a></li><li>      <a href="std_experimental_logger_multilogger.html" title="std.experimental.logger.multilogger"><span class="d_inlinecode donthyphenate notranslate">multilogger</span></a></li><li>      <a href="std_experimental_logger_nulllogger.html" title="std.experimental.logger.nulllogger"><span class="d_inlinecode donthyphenate notranslate">nulllogger</span></a>
  110     </li></ul></li><li>    <a href="std_experimental_typecons.html" title="std.experimental.typecons"><span class="d_inlinecode donthyphenate notranslate">typecons</span></a>
  111   </li></ul></li><li>  <a href="std_file.html" title="std.file"><span class="d_inlinecode donthyphenate notranslate">file</span></a></li><li>  <a href="std_format.html" title="std.format"><span class="d_inlinecode donthyphenate notranslate">format</span></a></li><li>  <a href="std_functional.html" title="std.functional"><span class="d_inlinecode donthyphenate notranslate">functional</span></a></li><li>  <a href="std_getopt.html" title="std.getopt"><span class="d_inlinecode donthyphenate notranslate">getopt</span></a></li><li>  <a href="std_json.html" title="std.json"><span class="d_inlinecode donthyphenate notranslate">json</span></a></li><li>  <a href="std_math.html" title="std.math"><span class="d_inlinecode donthyphenate notranslate">math</span></a></li><li>  <a href="std_mathspecial.html" title="std.mathspecial"><span class="d_inlinecode donthyphenate notranslate">mathspecial</span></a></li><li>  <a href="std_meta.html" title="std.meta"><span class="d_inlinecode donthyphenate notranslate">meta</span></a></li><li>  <a href="std_mmfile.html" title="std.mmfile"><span class="d_inlinecode donthyphenate notranslate">mmfile</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">net</span></h7><ul><li>    <a href="std_net_curl.html" title="std.net.curl"><span class="d_inlinecode donthyphenate notranslate">curl</span></a></li><li>    <a href="std_net_isemail.html" title="std.net.isemail"><span class="d_inlinecode donthyphenate notranslate">isemail</span></a>
  112   </li></ul></li><li>  <a href="std_numeric.html" title="std.numeric"><span class="d_inlinecode donthyphenate notranslate">numeric</span></a></li><li>  <a href="std_outbuffer.html" title="std.outbuffer"><span class="d_inlinecode donthyphenate notranslate">outbuffer</span></a></li><li>  <a href="std_parallelism.html" title="std.parallelism"><span class="d_inlinecode donthyphenate notranslate">parallelism</span></a></li><li>  <a href="std_path.html" title="std.path"><span class="d_inlinecode donthyphenate notranslate">path</span></a></li><li>  <a href="std_process.html" title="std.process"><span class="d_inlinecode donthyphenate notranslate">process</span></a></li><li>  <a href="std_random.html" title="std.random"><span class="d_inlinecode donthyphenate notranslate">random</span></a></li><li>  <a href="std_range.html" title="std.range"><span class="d_inlinecode donthyphenate notranslate">range</span></a><ul><li>    <a href="std_range_interfaces.html" title="std.range.interfaces"><span class="d_inlinecode donthyphenate notranslate">interfaces</span></a></li><li>    <a href="std_range_primitives.html" title="std.range.primitives"><span class="d_inlinecode donthyphenate notranslate">primitives</span></a>
  113   </li></ul></li><li>  <a href="std_regex.html" title="std.regex"><span class="d_inlinecode donthyphenate notranslate">regex</span></a></li><li>  <a href="std_signals.html" title="std.signals"><span class="d_inlinecode donthyphenate notranslate">signals</span></a></li><li>  <a href="std_socket.html" title="std.socket"><span class="d_inlinecode donthyphenate notranslate">socket</span></a></li><li>  <a href="std_stdint.html" title="std.stdint"><span class="d_inlinecode donthyphenate notranslate">stdint</span></a></li><li>  <a href="std_stdio.html" title="std.stdio"><span class="d_inlinecode donthyphenate notranslate">stdio</span></a></li><li>  <a href="std_string.html" title="std.string"><span class="d_inlinecode donthyphenate notranslate">string</span></a></li><li>  <a href="std_system.html" title="std.system"><span class="d_inlinecode donthyphenate notranslate">system</span></a></li><li>  <a href="std_traits.html" title="std.traits"><span class="d_inlinecode donthyphenate notranslate">traits</span></a></li><li>  <a href="std_typecons.html" title="std.typecons"><span class="d_inlinecode donthyphenate notranslate">typecons</span></a></li><li>  <a href="std_uni.html" title="std.uni"><span class="d_inlinecode donthyphenate notranslate">uni</span></a></li><li>  <a href="std_uri.html" title="std.uri"><span class="d_inlinecode donthyphenate notranslate">uri</span></a></li><li>  <a href="std_utf.html" title="std.utf"><span class="d_inlinecode donthyphenate notranslate">utf</span></a></li><li>  <a href="std_uuid.html" title="std.uuid"><span class="d_inlinecode donthyphenate notranslate">uuid</span></a></li><li>  <a href="std_variant.html" title="std.variant"><span class="d_inlinecode donthyphenate notranslate">variant</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">windows</span></h7><ul><li>    <a href="std_windows_charset.html" title="std.windows.charset"><span class="d_inlinecode donthyphenate notranslate">charset</span></a></li><li>    <a href="std_windows_syserror.html" title="std.windows.syserror"><span class="d_inlinecode donthyphenate notranslate">syserror</span></a>
  114   </li></ul></li><li>  <a href="std_xml.html" title="std.xml"><span class="d_inlinecode donthyphenate notranslate">xml</span></a></li><li>  <a href="std_zip.html" title="std.zip"><span class="d_inlinecode donthyphenate notranslate">zip</span></a></li><li>  <a href="std_zlib.html" title="std.zlib"><span class="d_inlinecode donthyphenate notranslate">zlib</span></a>
  115 </li></ul>
  116 </li>
  117 
  118 <li class='expand-container modlist-submenu-etc'><a class='expand-toggle' href='#'><span><em class="tt">etc</em></span></a>
  119 <ul><li>  <h7><span class="d_inlinecode donthyphenate notranslate">c</span></h7><ul><li>    <a href="etc_c_curl.html" title="etc.c.curl"><span class="d_inlinecode donthyphenate notranslate">curl</span></a></li><li>    <h7><span class="d_inlinecode donthyphenate notranslate">odbc</span></h7><ul><li>      <a href="etc_c_odbc_sql.html" title="etc.c.odbc.sql"><span class="d_inlinecode donthyphenate notranslate">sql</span></a></li><li>      <a href="etc_c_odbc_sqlext.html" title="etc.c.odbc.sqlext"><span class="d_inlinecode donthyphenate notranslate">sqlext</span></a></li><li>      <a href="etc_c_odbc_sqltypes.html" title="etc.c.odbc.sqltypes"><span class="d_inlinecode donthyphenate notranslate">sqltypes</span></a></li><li>      <a href="etc_c_odbc_sqlucode.html" title="etc.c.odbc.sqlucode"><span class="d_inlinecode donthyphenate notranslate">sqlucode</span></a>
  120     </li></ul></li><li>    <a href="etc_c_sqlite3.html" title="etc.c.sqlite3"><span class="d_inlinecode donthyphenate notranslate">sqlite3</span></a></li><li>    <a href="etc_c_zlib.html" title="etc.c.zlib"><span class="d_inlinecode donthyphenate notranslate">zlib</span></a>
  121   </li></ul>
  122 </li></ul>
  123 </li>
  124 
  125 <li class='expand-container modlist-submenu-core'><a class='expand-toggle' href='#'><span><em class="tt">core</em></span></a>
  126 <ul><li>  <a href="core_atomic.html" title="core.atomic"><span class="d_inlinecode donthyphenate notranslate">atomic</span></a></li><li>  <a href="core_attribute.html" title="core.attribute"><span class="d_inlinecode donthyphenate notranslate">attribute</span></a></li><li>  <a href="core_bitop.html" title="core.bitop"><span class="d_inlinecode donthyphenate notranslate">bitop</span></a></li><li>  <a href="core_checkedint.html" title="core.checkedint"><span class="d_inlinecode donthyphenate notranslate">checkedint</span></a></li><li>  <a href="core_cpuid.html" title="core.cpuid"><span class="d_inlinecode donthyphenate notranslate">cpuid</span></a></li><li>  <a href="core_demangle.html" title="core.demangle"><span class="d_inlinecode donthyphenate notranslate">demangle</span></a></li><li>  <a href="core_exception.html" title="core.exception"><span class="d_inlinecode donthyphenate notranslate">exception</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">gc</span></h7><ul><li>    <a href="core_gc_config.html" title="core.gc.config"><span class="d_inlinecode donthyphenate notranslate">config</span></a></li><li>    <a href="core_gc_gcinterface.html" title="core.gc.gcinterface"><span class="d_inlinecode donthyphenate notranslate">gcinterface</span></a></li><li>    <a href="core_gc_registry.html" title="core.gc.registry"><span class="d_inlinecode donthyphenate notranslate">registry</span></a>
  127   </li></ul></li><li>  <a href="core_lifetime.html" title="core.lifetime"><span class="d_inlinecode donthyphenate notranslate">lifetime</span></a></li><li>  <a href="core_math.html" title="core.math"><span class="d_inlinecode donthyphenate notranslate">math</span></a></li><li>  <a href="core_memory.html" title="core.memory"><span class="d_inlinecode donthyphenate notranslate">memory</span></a></li><li>  <a href="core_runtime.html" title="core.runtime"><span class="d_inlinecode donthyphenate notranslate">runtime</span></a></li><li>  <a href="core_simd.html" title="core.simd"><span class="d_inlinecode donthyphenate notranslate">simd</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">stdc</span></h7><ul><li>    <a href="core_stdc_assert_.html" title="core.stdc.assert_"><span class="d_inlinecode donthyphenate notranslate">assert_</span></a></li><li>    <a href="core_stdc_complex.html" title="core.stdc.complex"><span class="d_inlinecode donthyphenate notranslate">complex</span></a></li><li>    <a href="core_stdc_ctype.html" title="core.stdc.ctype"><span class="d_inlinecode donthyphenate notranslate">ctype</span></a></li><li>    <a href="core_stdc_errno.html" title="core.stdc.errno"><span class="d_inlinecode donthyphenate notranslate">errno</span></a></li><li>    <a href="core_stdc_fenv.html" title="core.stdc.fenv"><span class="d_inlinecode donthyphenate notranslate">fenv</span></a></li><li>    <a href="core_stdc_float_.html" title="core.stdc.float_"><span class="d_inlinecode donthyphenate notranslate">float_</span></a></li><li>    <a href="core_stdc_inttypes.html" title="core.stdc.inttypes"><span class="d_inlinecode donthyphenate notranslate">inttypes</span></a></li><li>    <a href="core_stdc_limits.html" title="core.stdc.limits"><span class="d_inlinecode donthyphenate notranslate">limits</span></a></li><li>    <a href="core_stdc_locale.html" title="core.stdc.locale"><span class="d_inlinecode donthyphenate notranslate">locale</span></a></li><li>    <a href="core_stdc_math.html" title="core.stdc.math"><span class="d_inlinecode donthyphenate notranslate">math</span></a></li><li>    <a href="core_stdc_signal.html" title="core.stdc.signal"><span class="d_inlinecode donthyphenate notranslate">signal</span></a></li><li>    <a href="core_stdc_stdarg.html" title="core.stdc.stdarg"><span class="d_inlinecode donthyphenate notranslate">stdarg</span></a></li><li>    <a href="core_stdc_stddef.html" title="core.stdc.stddef"><span class="d_inlinecode donthyphenate notranslate">stddef</span></a></li><li>    <a href="core_stdc_stdint.html" title="core.stdc.stdint"><span class="d_inlinecode donthyphenate notranslate">stdint</span></a></li><li>    <a href="core_stdc_stdio.html" title="core.stdc.stdio"><span class="d_inlinecode donthyphenate notranslate">stdio</span></a></li><li>    <a href="core_stdc_stdlib.html" title="core.stdc.stdlib"><span class="d_inlinecode donthyphenate notranslate">stdlib</span></a></li><li>    <a href="core_stdc_string.html" title="core.stdc.string"><span class="d_inlinecode donthyphenate notranslate">string</span></a></li><li>    <a href="core_stdc_tgmath.html" title="core.stdc.tgmath"><span class="d_inlinecode donthyphenate notranslate">tgmath</span></a></li><li>    <a href="core_stdc_time.html" title="core.stdc.time"><span class="d_inlinecode donthyphenate notranslate">time</span></a></li><li>    <a href="core_stdc_wchar_.html" title="core.stdc.wchar_"><span class="d_inlinecode donthyphenate notranslate">wchar_</span></a></li><li>    <a href="core_stdc_wctype.html" title="core.stdc.wctype"><span class="d_inlinecode donthyphenate notranslate">wctype</span></a>
  128   </li></ul></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">stdcpp</span></h7><ul><li>    <a href="core_stdcpp_allocator.html" title="core.stdcpp.allocator"><span class="d_inlinecode donthyphenate notranslate">allocator</span></a></li><li>    <a href="core_stdcpp_array.html" title="core.stdcpp.array"><span class="d_inlinecode donthyphenate notranslate">array</span></a></li><li>    <a href="core_stdcpp_exception.html" title="core.stdcpp.exception"><span class="d_inlinecode donthyphenate notranslate">exception</span></a></li><li>    <a href="core_stdcpp_memory.html" title="core.stdcpp.memory"><span class="d_inlinecode donthyphenate notranslate">memory</span></a></li><li>    <a href="core_stdcpp_new_.html" title="core.stdcpp.new_"><span class="d_inlinecode donthyphenate notranslate">new_</span></a></li><li>    <a href="core_stdcpp_string.html" title="core.stdcpp.string"><span class="d_inlinecode donthyphenate notranslate">string</span></a></li><li>    <a href="core_stdcpp_string_view.html" title="core.stdcpp.string_view"><span class="d_inlinecode donthyphenate notranslate">string_view</span></a></li><li>    <a href="core_stdcpp_type_traits.html" title="core.stdcpp.type_traits"><span class="d_inlinecode donthyphenate notranslate">type_traits</span></a></li><li>    <a href="core_stdcpp_typeinfo.html" title="core.stdcpp.typeinfo"><span class="d_inlinecode donthyphenate notranslate">typeinfo</span></a></li><li>    <a href="core_stdcpp_utility.html" title="core.stdcpp.utility"><span class="d_inlinecode donthyphenate notranslate">utility</span></a></li><li>    <a href="core_stdcpp_vector.html" title="core.stdcpp.vector"><span class="d_inlinecode donthyphenate notranslate">vector</span></a></li><li>    <a href="core_stdcpp_xutility.html" title="core.stdcpp.xutility"><span class="d_inlinecode donthyphenate notranslate">xutility</span></a>
  129   </li></ul></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">sync</span></h7><ul><li>    <a href="core_sync_barrier.html" title="core.sync.barrier"><span class="d_inlinecode donthyphenate notranslate">barrier</span></a></li><li>    <a href="core_sync_condition.html" title="core.sync.condition"><span class="d_inlinecode donthyphenate notranslate">condition</span></a></li><li>    <a href="core_sync_config.html" title="core.sync.config"><span class="d_inlinecode donthyphenate notranslate">config</span></a></li><li>    <a href="core_sync_event.html" title="core.sync.event"><span class="d_inlinecode donthyphenate notranslate">event</span></a></li><li>    <a href="core_sync_exception.html" title="core.sync.exception"><span class="d_inlinecode donthyphenate notranslate">exception</span></a></li><li>    <a href="core_sync_mutex.html" title="core.sync.mutex"><span class="d_inlinecode donthyphenate notranslate">mutex</span></a></li><li>    <a href="core_sync_rwmutex.html" title="core.sync.rwmutex"><span class="d_inlinecode donthyphenate notranslate">rwmutex</span></a></li><li>    <a href="core_sync_semaphore.html" title="core.sync.semaphore"><span class="d_inlinecode donthyphenate notranslate">semaphore</span></a>
  130   </li></ul></li><li>  <a href="core_thread.html" title="core.thread"><span class="d_inlinecode donthyphenate notranslate">thread</span></a><ul><li>    <a href="core_thread_context.html" title="core.thread.context"><span class="d_inlinecode donthyphenate notranslate">context</span></a></li><li>    <a href="core_thread_fiber.html" title="core.thread.fiber"><span class="d_inlinecode donthyphenate notranslate">fiber</span></a></li><li>    <a href="core_thread_osthread.html" title="core.thread.osthread"><span class="d_inlinecode donthyphenate notranslate">osthread</span></a></li><li>    <a href="core_thread_threadbase.html" title="core.thread.threadbase"><span class="d_inlinecode donthyphenate notranslate">threadbase</span></a></li><li>    <a href="core_thread_threadgroup.html" title="core.thread.threadgroup"><span class="d_inlinecode donthyphenate notranslate">threadgroup</span></a></li><li>    <a href="core_thread_types.html" title="core.thread.types"><span class="d_inlinecode donthyphenate notranslate">types</span></a>
  131   </li></ul></li><li>  <a href="core_time.html" title="core.time"><span class="d_inlinecode donthyphenate notranslate">time</span></a></li><li>  <a href="core_vararg.html" title="core.vararg"><span class="d_inlinecode donthyphenate notranslate">vararg</span></a></li><li>  <a href="core_volatile.html" title="core.volatile"><span class="d_inlinecode donthyphenate notranslate">volatile</span></a>
  132 </li></ul>
  133 </li>
  134 <div class="modlist-internal-separator">Internal API</div>
  135 
  136 <li class='expand-container modlist-submenu-core'><a class='expand-toggle' href='#'><span><em class="tt">core</em></span></a>
  137 <ul><li>  <h7><span class="d_inlinecode donthyphenate notranslate">internal</span></h7><ul><li>    <h7><span class="d_inlinecode donthyphenate notranslate">array</span></h7><ul><li>      <a href="core_internal_array_appending.html" title="core.internal.array.appending"><span class="d_inlinecode donthyphenate notranslate">appending</span></a></li><li>      <a href="core_internal_array_capacity.html" title="core.internal.array.capacity"><span class="d_inlinecode donthyphenate notranslate">capacity</span></a></li><li>      <a href="core_internal_array_casting.html" title="core.internal.array.casting"><span class="d_inlinecode donthyphenate notranslate">casting</span></a></li><li>      <a href="core_internal_array_comparison.html" title="core.internal.array.comparison"><span class="d_inlinecode donthyphenate notranslate">comparison</span></a></li><li>      <a href="core_internal_array_concatenation.html" title="core.internal.array.concatenation"><span class="d_inlinecode donthyphenate notranslate">concatenation</span></a></li><li>      <a href="core_internal_array_construction.html" title="core.internal.array.construction"><span class="d_inlinecode donthyphenate notranslate">construction</span></a></li><li>      <a href="core_internal_array_equality.html" title="core.internal.array.equality"><span class="d_inlinecode donthyphenate notranslate">equality</span></a></li><li>      <a href="core_internal_array_operations.html" title="core.internal.array.operations"><span class="d_inlinecode donthyphenate notranslate">operations</span></a></li><li>      <a href="core_internal_array_utils.html" title="core.internal.array.utils"><span class="d_inlinecode donthyphenate notranslate">utils</span></a>
  138     </li></ul></li><li>    <h7><span class="d_inlinecode donthyphenate notranslate">util</span></h7><ul><li>      <a href="core_internal_util_array.html" title="core.internal.util.array"><span class="d_inlinecode donthyphenate notranslate">array</span></a>
  139     </li></ul>
  140   </li></ul>
  141 </li></ul>
  142 </li>
  143 
  144 <li class='expand-container modlist-submenu-dmd'><a class='expand-toggle' href='#'><span><em class="tt">dmd</em></span></a>
  145 <ul><li>  <a href="dmd_access.html" title="dmd.access"><span class="d_inlinecode donthyphenate notranslate">access</span></a></li><li>  <a href="dmd_aggregate.html" title="dmd.aggregate"><span class="d_inlinecode donthyphenate notranslate">aggregate</span></a></li><li>  <a href="dmd_aliasthis.html" title="dmd.aliasthis"><span class="d_inlinecode donthyphenate notranslate">aliasthis</span></a></li><li>  <a href="dmd_apply.html" title="dmd.apply"><span class="d_inlinecode donthyphenate notranslate">apply</span></a></li><li>  <a href="dmd_argtypes_aarch64.html" title="dmd.argtypes_aarch64"><span class="d_inlinecode donthyphenate notranslate">argtypes_aarch64</span></a></li><li>  <a href="dmd_argtypes_sysv_x64.html" title="dmd.argtypes_sysv_x64"><span class="d_inlinecode donthyphenate notranslate">argtypes_sysv_x64</span></a></li><li>  <a href="dmd_argtypes_x86.html" title="dmd.argtypes_x86"><span class="d_inlinecode donthyphenate notranslate">argtypes_x86</span></a></li><li>  <a href="dmd_arrayop.html" title="dmd.arrayop"><span class="d_inlinecode donthyphenate notranslate">arrayop</span></a></li><li>  <a href="dmd_arraytypes.html" title="dmd.arraytypes"><span class="d_inlinecode donthyphenate notranslate">arraytypes</span></a></li><li>  <a href="dmd_ast_node.html" title="dmd.ast_node"><span class="d_inlinecode donthyphenate notranslate">ast_node</span></a></li><li>  <a href="dmd_astbase.html" title="dmd.astbase"><span class="d_inlinecode donthyphenate notranslate">astbase</span></a></li><li>  <a href="dmd_astcodegen.html" title="dmd.astcodegen"><span class="d_inlinecode donthyphenate notranslate">astcodegen</span></a></li><li>  <a href="dmd_asttypename.html" title="dmd.asttypename"><span class="d_inlinecode donthyphenate notranslate">asttypename</span></a></li><li>  <a href="dmd_attrib.html" title="dmd.attrib"><span class="d_inlinecode donthyphenate notranslate">attrib</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">backend</span></h7><ul><li>    <a href="dmd_backend_aarray.html" title="dmd.backend.aarray"><span class="d_inlinecode donthyphenate notranslate">aarray</span></a></li><li>    <a href="dmd_backend_backconfig.html" title="dmd.backend.backconfig"><span class="d_inlinecode donthyphenate notranslate">backconfig</span></a></li><li>    <a href="dmd_backend_backend.html" title="dmd.backend.backend"><span class="d_inlinecode donthyphenate notranslate">backend</span></a></li><li>    <a href="dmd_backend_barray.html" title="dmd.backend.barray"><span class="d_inlinecode donthyphenate notranslate">barray</span></a></li><li>    <a href="dmd_backend_bcomplex.html" title="dmd.backend.bcomplex"><span class="d_inlinecode donthyphenate notranslate">bcomplex</span></a></li><li>    <a href="dmd_backend_blockopt.html" title="dmd.backend.blockopt"><span class="d_inlinecode donthyphenate notranslate">blockopt</span></a></li><li>    <a href="dmd_backend_cc.html" title="dmd.backend.cc"><span class="d_inlinecode donthyphenate notranslate">cc</span></a></li><li>    <a href="dmd_backend_cdef.html" title="dmd.backend.cdef"><span class="d_inlinecode donthyphenate notranslate">cdef</span></a></li><li>    <a href="dmd_backend_cg.html" title="dmd.backend.cg"><span class="d_inlinecode donthyphenate notranslate">cg</span></a></li><li>    <a href="dmd_backend_cg87.html" title="dmd.backend.cg87"><span class="d_inlinecode donthyphenate notranslate">cg87</span></a></li><li>    <a href="dmd_backend_cgcod.html" title="dmd.backend.cgcod"><span class="d_inlinecode donthyphenate notranslate">cgcod</span></a></li><li>    <a href="dmd_backend_cgcs.html" title="dmd.backend.cgcs"><span class="d_inlinecode donthyphenate notranslate">cgcs</span></a></li><li>    <a href="dmd_backend_cgcse.html" title="dmd.backend.cgcse"><span class="d_inlinecode donthyphenate notranslate">cgcse</span></a></li><li>    <a href="dmd_backend_cgcv.html" title="dmd.backend.cgcv"><span class="d_inlinecode donthyphenate notranslate">cgcv</span></a></li><li>    <a href="dmd_backend_cgelem.html" title="dmd.backend.cgelem"><span class="d_inlinecode donthyphenate notranslate">cgelem</span></a></li><li>    <a href="dmd_backend_cgen.html" title="dmd.backend.cgen"><span class="d_inlinecode donthyphenate notranslate">cgen</span></a></li><li>    <a href="dmd_backend_cgobj.html" title="dmd.backend.cgobj"><span class="d_inlinecode donthyphenate notranslate">cgobj</span></a></li><li>    <a href="dmd_backend_cgreg.html" title="dmd.backend.cgreg"><span class="d_inlinecode donthyphenate notranslate">cgreg</span></a></li><li>    <a href="dmd_backend_cgsched.html" title="dmd.backend.cgsched"><span class="d_inlinecode donthyphenate notranslate">cgsched</span></a></li><li>    <a href="dmd_backend_cgxmm.html" title="dmd.backend.cgxmm"><span class="d_inlinecode donthyphenate notranslate">cgxmm</span></a></li><li>    <a href="dmd_backend_cod1.html" title="dmd.backend.cod1"><span class="d_inlinecode donthyphenate notranslate">cod1</span></a></li><li>    <a href="dmd_backend_cod2.html" title="dmd.backend.cod2"><span class="d_inlinecode donthyphenate notranslate">cod2</span></a></li><li>    <a href="dmd_backend_cod3.html" title="dmd.backend.cod3"><span class="d_inlinecode donthyphenate notranslate">cod3</span></a></li><li>    <a href="dmd_backend_cod4.html" title="dmd.backend.cod4"><span class="d_inlinecode donthyphenate notranslate">cod4</span></a></li><li>    <a href="dmd_backend_cod5.html" title="dmd.backend.cod5"><span class="d_inlinecode donthyphenate notranslate">cod5</span></a></li><li>    <a href="dmd_backend_code.html" title="dmd.backend.code"><span class="d_inlinecode donthyphenate notranslate">code</span></a></li><li>    <a href="dmd_backend_code_x86.html" title="dmd.backend.code_x86"><span class="d_inlinecode donthyphenate notranslate">code_x86</span></a></li><li>    <a href="dmd_backend_codebuilder.html" title="dmd.backend.codebuilder"><span class="d_inlinecode donthyphenate notranslate">codebuilder</span></a></li><li>    <a href="dmd_backend_compress.html" title="dmd.backend.compress"><span class="d_inlinecode donthyphenate notranslate">compress</span></a></li><li>    <a href="dmd_backend_cv4.html" title="dmd.backend.cv4"><span class="d_inlinecode donthyphenate notranslate">cv4</span></a></li><li>    <a href="dmd_backend_cv8.html" title="dmd.backend.cv8"><span class="d_inlinecode donthyphenate notranslate">cv8</span></a></li><li>    <a href="dmd_backend_dcgcv.html" title="dmd.backend.dcgcv"><span class="d_inlinecode donthyphenate notranslate">dcgcv</span></a></li><li>    <a href="dmd_backend_dcode.html" title="dmd.backend.dcode"><span class="d_inlinecode donthyphenate notranslate">dcode</span></a></li><li>    <a href="dmd_backend_debugprint.html" title="dmd.backend.debugprint"><span class="d_inlinecode donthyphenate notranslate">debugprint</span></a></li><li>    <a href="dmd_backend_divcoeff.html" title="dmd.backend.divcoeff"><span class="d_inlinecode donthyphenate notranslate">divcoeff</span></a></li><li>    <a href="dmd_backend_dlist.html" title="dmd.backend.dlist"><span class="d_inlinecode donthyphenate notranslate">dlist</span></a></li><li>    <a href="dmd_backend_drtlsym.html" title="dmd.backend.drtlsym"><span class="d_inlinecode donthyphenate notranslate">drtlsym</span></a></li><li>    <a href="dmd_backend_dt.html" title="dmd.backend.dt"><span class="d_inlinecode donthyphenate notranslate">dt</span></a></li><li>    <a href="dmd_backend_dtype.html" title="dmd.backend.dtype"><span class="d_inlinecode donthyphenate notranslate">dtype</span></a></li><li>    <a href="dmd_backend_dvarstats.html" title="dmd.backend.dvarstats"><span class="d_inlinecode donthyphenate notranslate">dvarstats</span></a></li><li>    <a href="dmd_backend_dvec.html" title="dmd.backend.dvec"><span class="d_inlinecode donthyphenate notranslate">dvec</span></a></li><li>    <a href="dmd_backend_dwarf.html" title="dmd.backend.dwarf"><span class="d_inlinecode donthyphenate notranslate">dwarf</span></a></li><li>    <a href="dmd_backend_dwarf2.html" title="dmd.backend.dwarf2"><span class="d_inlinecode donthyphenate notranslate">dwarf2</span></a></li><li>    <a href="dmd_backend_dwarfdbginf.html" title="dmd.backend.dwarfdbginf"><span class="d_inlinecode donthyphenate notranslate">dwarfdbginf</span></a></li><li>    <a href="dmd_backend_dwarfeh.html" title="dmd.backend.dwarfeh"><span class="d_inlinecode donthyphenate notranslate">dwarfeh</span></a></li><li>    <a href="dmd_backend_ee.html" title="dmd.backend.ee"><span class="d_inlinecode donthyphenate notranslate">ee</span></a></li><li>    <a href="dmd_backend_el.html" title="dmd.backend.el"><span class="d_inlinecode donthyphenate notranslate">el</span></a></li><li>    <a href="dmd_backend_elem.html" title="dmd.backend.elem"><span class="d_inlinecode donthyphenate notranslate">elem</span></a></li><li>    <a href="dmd_backend_elfobj.html" title="dmd.backend.elfobj"><span class="d_inlinecode donthyphenate notranslate">elfobj</span></a></li><li>    <a href="dmd_backend_elpicpie.html" title="dmd.backend.elpicpie"><span class="d_inlinecode donthyphenate notranslate">elpicpie</span></a></li><li>    <a href="dmd_backend_evalu8.html" title="dmd.backend.evalu8"><span class="d_inlinecode donthyphenate notranslate">evalu8</span></a></li><li>    <a href="dmd_backend_exh.html" title="dmd.backend.exh"><span class="d_inlinecode donthyphenate notranslate">exh</span></a></li><li>    <a href="dmd_backend_filespec.html" title="dmd.backend.filespec"><span class="d_inlinecode donthyphenate notranslate">filespec</span></a></li><li>    <a href="dmd_backend_fp.html" title="dmd.backend.fp"><span class="d_inlinecode donthyphenate notranslate">fp</span></a></li><li>    <a href="dmd_backend_gdag.html" title="dmd.backend.gdag"><span class="d_inlinecode donthyphenate notranslate">gdag</span></a></li><li>    <a href="dmd_backend_gflow.html" title="dmd.backend.gflow"><span class="d_inlinecode donthyphenate notranslate">gflow</span></a></li><li>    <a href="dmd_backend_global.html" title="dmd.backend.global"><span class="d_inlinecode donthyphenate notranslate">global</span></a></li><li>    <a href="dmd_backend_glocal.html" title="dmd.backend.glocal"><span class="d_inlinecode donthyphenate notranslate">glocal</span></a></li><li>    <a href="dmd_backend_gloop.html" title="dmd.backend.gloop"><span class="d_inlinecode donthyphenate notranslate">gloop</span></a></li><li>    <a href="dmd_backend_go.html" title="dmd.backend.go"><span class="d_inlinecode donthyphenate notranslate">go</span></a></li><li>    <a href="dmd_backend_goh.html" title="dmd.backend.goh"><span class="d_inlinecode donthyphenate notranslate">goh</span></a></li><li>    <a href="dmd_backend_gother.html" title="dmd.backend.gother"><span class="d_inlinecode donthyphenate notranslate">gother</span></a></li><li>    <a href="dmd_backend_gsroa.html" title="dmd.backend.gsroa"><span class="d_inlinecode donthyphenate notranslate">gsroa</span></a></li><li>    <a href="dmd_backend_iasm.html" title="dmd.backend.iasm"><span class="d_inlinecode donthyphenate notranslate">iasm</span></a></li><li>    <a href="dmd_backend_mach.html" title="dmd.backend.mach"><span class="d_inlinecode donthyphenate notranslate">mach</span></a></li><li>    <a href="dmd_backend_machobj.html" title="dmd.backend.machobj"><span class="d_inlinecode donthyphenate notranslate">machobj</span></a></li><li>    <a href="dmd_backend_md5.html" title="dmd.backend.md5"><span class="d_inlinecode donthyphenate notranslate">md5</span></a></li><li>    <a href="dmd_backend_melf.html" title="dmd.backend.melf"><span class="d_inlinecode donthyphenate notranslate">melf</span></a></li><li>    <a href="dmd_backend_mem.html" title="dmd.backend.mem"><span class="d_inlinecode donthyphenate notranslate">mem</span></a></li><li>    <a href="dmd_backend_mscoff.html" title="dmd.backend.mscoff"><span class="d_inlinecode donthyphenate notranslate">mscoff</span></a></li><li>    <a href="dmd_backend_mscoffobj.html" title="dmd.backend.mscoffobj"><span class="d_inlinecode donthyphenate notranslate">mscoffobj</span></a></li><li>    <a href="dmd_backend_newman.html" title="dmd.backend.newman"><span class="d_inlinecode donthyphenate notranslate">newman</span></a></li><li>    <a href="dmd_backend_nteh.html" title="dmd.backend.nteh"><span class="d_inlinecode donthyphenate notranslate">nteh</span></a></li><li>    <a href="dmd_backend_obj.html" title="dmd.backend.obj"><span class="d_inlinecode donthyphenate notranslate">obj</span></a></li><li>    <a href="dmd_backend_oper.html" title="dmd.backend.oper"><span class="d_inlinecode donthyphenate notranslate">oper</span></a></li><li>    <a href="dmd_backend_os.html" title="dmd.backend.os"><span class="d_inlinecode donthyphenate notranslate">os</span></a></li><li>    <a href="dmd_backend_out.html" title="dmd.backend.out"><span class="d_inlinecode donthyphenate notranslate">out</span></a></li><li>    <a href="dmd_backend_outbuf.html" title="dmd.backend.outbuf"><span class="d_inlinecode donthyphenate notranslate">outbuf</span></a></li><li>    <a href="dmd_backend_pdata.html" title="dmd.backend.pdata"><span class="d_inlinecode donthyphenate notranslate">pdata</span></a></li><li>    <a href="dmd_backend_ph2.html" title="dmd.backend.ph2"><span class="d_inlinecode donthyphenate notranslate">ph2</span></a></li><li>    <a href="dmd_backend_ptrntab.html" title="dmd.backend.ptrntab"><span class="d_inlinecode donthyphenate notranslate">ptrntab</span></a></li><li>    <a href="dmd_backend_rtlsym.html" title="dmd.backend.rtlsym"><span class="d_inlinecode donthyphenate notranslate">rtlsym</span></a></li><li>    <a href="dmd_backend_symbol.html" title="dmd.backend.symbol"><span class="d_inlinecode donthyphenate notranslate">symbol</span></a></li><li>    <a href="dmd_backend_ty.html" title="dmd.backend.ty"><span class="d_inlinecode donthyphenate notranslate">ty</span></a></li><li>    <a href="dmd_backend_type.html" title="dmd.backend.type"><span class="d_inlinecode donthyphenate notranslate">type</span></a></li><li>    <a href="dmd_backend_util2.html" title="dmd.backend.util2"><span class="d_inlinecode donthyphenate notranslate">util2</span></a></li><li>    <a href="dmd_backend_var.html" title="dmd.backend.var"><span class="d_inlinecode donthyphenate notranslate">var</span></a></li><li>    <a href="dmd_backend_xmm.html" title="dmd.backend.xmm"><span class="d_inlinecode donthyphenate notranslate">xmm</span></a>
  146   </li></ul></li><li>  <a href="dmd_blockexit.html" title="dmd.blockexit"><span class="d_inlinecode donthyphenate notranslate">blockexit</span></a></li><li>  <a href="dmd_builtin.html" title="dmd.builtin"><span class="d_inlinecode donthyphenate notranslate">builtin</span></a></li><li>  <a href="dmd_canthrow.html" title="dmd.canthrow"><span class="d_inlinecode donthyphenate notranslate">canthrow</span></a></li><li>  <a href="dmd_chkformat.html" title="dmd.chkformat"><span class="d_inlinecode donthyphenate notranslate">chkformat</span></a></li><li>  <a href="dmd_cli.html" title="dmd.cli"><span class="d_inlinecode donthyphenate notranslate">cli</span></a></li><li>  <a href="dmd_clone.html" title="dmd.clone"><span class="d_inlinecode donthyphenate notranslate">clone</span></a></li><li>  <a href="dmd_compiler.html" title="dmd.compiler"><span class="d_inlinecode donthyphenate notranslate">compiler</span></a></li><li>  <a href="dmd_complex.html" title="dmd.complex"><span class="d_inlinecode donthyphenate notranslate">complex</span></a></li><li>  <a href="dmd_cond.html" title="dmd.cond"><span class="d_inlinecode donthyphenate notranslate">cond</span></a></li><li>  <a href="dmd_console.html" title="dmd.console"><span class="d_inlinecode donthyphenate notranslate">console</span></a></li><li>  <a href="dmd_constfold.html" title="dmd.constfold"><span class="d_inlinecode donthyphenate notranslate">constfold</span></a></li><li>  <a href="dmd_cppmangle.html" title="dmd.cppmangle"><span class="d_inlinecode donthyphenate notranslate">cppmangle</span></a></li><li>  <a href="dmd_cppmanglewin.html" title="dmd.cppmanglewin"><span class="d_inlinecode donthyphenate notranslate">cppmanglewin</span></a></li><li>  <a href="dmd_ctfeexpr.html" title="dmd.ctfeexpr"><span class="d_inlinecode donthyphenate notranslate">ctfeexpr</span></a></li><li>  <a href="dmd_ctorflow.html" title="dmd.ctorflow"><span class="d_inlinecode donthyphenate notranslate">ctorflow</span></a></li><li>  <a href="dmd_dcast.html" title="dmd.dcast"><span class="d_inlinecode donthyphenate notranslate">dcast</span></a></li><li>  <a href="dmd_dclass.html" title="dmd.dclass"><span class="d_inlinecode donthyphenate notranslate">dclass</span></a></li><li>  <a href="dmd_declaration.html" title="dmd.declaration"><span class="d_inlinecode donthyphenate notranslate">declaration</span></a></li><li>  <a href="dmd_delegatize.html" title="dmd.delegatize"><span class="d_inlinecode donthyphenate notranslate">delegatize</span></a></li><li>  <a href="dmd_denum.html" title="dmd.denum"><span class="d_inlinecode donthyphenate notranslate">denum</span></a></li><li>  <a href="dmd_dimport.html" title="dmd.dimport"><span class="d_inlinecode donthyphenate notranslate">dimport</span></a></li><li>  <a href="dmd_dinifile.html" title="dmd.dinifile"><span class="d_inlinecode donthyphenate notranslate">dinifile</span></a></li><li>  <a href="dmd_dinterpret.html" title="dmd.dinterpret"><span class="d_inlinecode donthyphenate notranslate">dinterpret</span></a></li><li>  <a href="dmd_dmacro.html" title="dmd.dmacro"><span class="d_inlinecode donthyphenate notranslate">dmacro</span></a></li><li>  <a href="dmd_dmangle.html" title="dmd.dmangle"><span class="d_inlinecode donthyphenate notranslate">dmangle</span></a></li><li>  <a href="dmd_dmodule.html" title="dmd.dmodule"><span class="d_inlinecode donthyphenate notranslate">dmodule</span></a></li><li>  <a href="dmd_dmsc.html" title="dmd.dmsc"><span class="d_inlinecode donthyphenate notranslate">dmsc</span></a></li><li>  <a href="dmd_doc.html" title="dmd.doc"><span class="d_inlinecode donthyphenate notranslate">doc</span></a></li><li>  <a href="dmd_dscope.html" title="dmd.dscope"><span class="d_inlinecode donthyphenate notranslate">dscope</span></a></li><li>  <a href="dmd_dstruct.html" title="dmd.dstruct"><span class="d_inlinecode donthyphenate notranslate">dstruct</span></a></li><li>  <a href="dmd_dsymbol.html" title="dmd.dsymbol"><span class="d_inlinecode donthyphenate notranslate">dsymbol</span></a></li><li>  <a href="dmd_dsymbolsem.html" title="dmd.dsymbolsem"><span class="d_inlinecode donthyphenate notranslate">dsymbolsem</span></a></li><li>  <a href="dmd_dtemplate.html" title="dmd.dtemplate"><span class="d_inlinecode donthyphenate notranslate">dtemplate</span></a></li><li>  <a href="dmd_dtoh.html" title="dmd.dtoh"><span class="d_inlinecode donthyphenate notranslate">dtoh</span></a></li><li>  <a href="dmd_dversion.html" title="dmd.dversion"><span class="d_inlinecode donthyphenate notranslate">dversion</span></a></li><li>  <a href="dmd_e2ir.html" title="dmd.e2ir"><span class="d_inlinecode donthyphenate notranslate">e2ir</span></a></li><li>  <a href="dmd_eh.html" title="dmd.eh"><span class="d_inlinecode donthyphenate notranslate">eh</span></a></li><li>  <a href="dmd_entity.html" title="dmd.entity"><span class="d_inlinecode donthyphenate notranslate">entity</span></a></li><li>  <a href="dmd_env.html" title="dmd.env"><span class="d_inlinecode donthyphenate notranslate">env</span></a></li><li>  <a href="dmd_errors.html" title="dmd.errors"><span class="d_inlinecode donthyphenate notranslate">errors</span></a></li><li>  <a href="dmd_escape.html" title="dmd.escape"><span class="d_inlinecode donthyphenate notranslate">escape</span></a></li><li>  <a href="dmd_expression.html" title="dmd.expression"><span class="d_inlinecode donthyphenate notranslate">expression</span></a></li><li>  <a href="dmd_expressionsem.html" title="dmd.expressionsem"><span class="d_inlinecode donthyphenate notranslate">expressionsem</span></a></li><li>  <a href="dmd_filecache.html" title="dmd.filecache"><span class="d_inlinecode donthyphenate notranslate">filecache</span></a></li><li>  <a href="dmd_foreachvar.html" title="dmd.foreachvar"><span class="d_inlinecode donthyphenate notranslate">foreachvar</span></a></li><li>  <a href="dmd_frontend.html" title="dmd.frontend"><span class="d_inlinecode donthyphenate notranslate">frontend</span></a></li><li>  <a href="dmd_func.html" title="dmd.func"><span class="d_inlinecode donthyphenate notranslate">func</span></a></li><li>  <a href="dmd_globals.html" title="dmd.globals"><span class="d_inlinecode donthyphenate notranslate">globals</span></a></li><li>  <a href="dmd_glue.html" title="dmd.glue"><span class="d_inlinecode donthyphenate notranslate">glue</span></a></li><li>  <a href="dmd_gluelayer.html" title="dmd.gluelayer"><span class="d_inlinecode donthyphenate notranslate">gluelayer</span></a></li><li>  <a href="dmd_hdrgen.html" title="dmd.hdrgen"><span class="d_inlinecode donthyphenate notranslate">hdrgen</span></a></li><li>  <a href="dmd_iasm.html" title="dmd.iasm"><span class="d_inlinecode donthyphenate notranslate">iasm</span></a></li><li>  <a href="dmd_iasmdmd.html" title="dmd.iasmdmd"><span class="d_inlinecode donthyphenate notranslate">iasmdmd</span></a></li><li>  <a href="dmd_iasmgcc.html" title="dmd.iasmgcc"><span class="d_inlinecode donthyphenate notranslate">iasmgcc</span></a></li><li>  <a href="dmd_id.html" title="dmd.id"><span class="d_inlinecode donthyphenate notranslate">id</span></a></li><li>  <a href="dmd_identifier.html" title="dmd.identifier"><span class="d_inlinecode donthyphenate notranslate">identifier</span></a></li><li>  <a href="dmd_impcnvtab.html" title="dmd.impcnvtab"><span class="d_inlinecode donthyphenate notranslate">impcnvtab</span></a></li><li>  <a href="dmd_imphint.html" title="dmd.imphint"><span class="d_inlinecode donthyphenate notranslate">imphint</span></a></li><li>  <a href="dmd_init.html" title="dmd.init"><span class="d_inlinecode donthyphenate notranslate">init</span></a></li><li>  <a href="dmd_initsem.html" title="dmd.initsem"><span class="d_inlinecode donthyphenate notranslate">initsem</span></a></li><li>  <a href="dmd_inline.html" title="dmd.inline"><span class="d_inlinecode donthyphenate notranslate">inline</span></a></li><li>  <a href="dmd_inlinecost.html" title="dmd.inlinecost"><span class="d_inlinecode donthyphenate notranslate">inlinecost</span></a></li><li>  <a href="dmd_intrange.html" title="dmd.intrange"><span class="d_inlinecode donthyphenate notranslate">intrange</span></a></li><li>  <a href="dmd_json.html" title="dmd.json"><span class="d_inlinecode donthyphenate notranslate">json</span></a></li><li>  <a href="dmd_lambdacomp.html" title="dmd.lambdacomp"><span class="d_inlinecode donthyphenate notranslate">lambdacomp</span></a></li><li>  <a href="dmd_lexer.html" title="dmd.lexer"><span class="d_inlinecode donthyphenate notranslate">lexer</span></a></li><li>  <a href="dmd_lib.html" title="dmd.lib"><span class="d_inlinecode donthyphenate notranslate">lib</span></a></li><li>  <a href="dmd_libelf.html" title="dmd.libelf"><span class="d_inlinecode donthyphenate notranslate">libelf</span></a></li><li>  <a href="dmd_libomf.html" title="dmd.libomf"><span class="d_inlinecode donthyphenate notranslate">libomf</span></a></li><li>  <a href="dmd_link.html" title="dmd.link"><span class="d_inlinecode donthyphenate notranslate">link</span></a></li><li>  <a href="dmd_mars.html" title="dmd.mars"><span class="d_inlinecode donthyphenate notranslate">mars</span></a></li><li>  <a href="dmd_mtype.html" title="dmd.mtype"><span class="d_inlinecode donthyphenate notranslate">mtype</span></a></li><li>  <a href="dmd_nogc.html" title="dmd.nogc"><span class="d_inlinecode donthyphenate notranslate">nogc</span></a></li><li>  <a href="dmd_nspace.html" title="dmd.nspace"><span class="d_inlinecode donthyphenate notranslate">nspace</span></a></li><li>  <a href="dmd_ob.html" title="dmd.ob"><span class="d_inlinecode donthyphenate notranslate">ob</span></a></li><li>  <a href="dmd_objc.html" title="dmd.objc"><span class="d_inlinecode donthyphenate notranslate">objc</span></a></li><li>  <a href="dmd_objc_glue.html" title="dmd.objc_glue"><span class="d_inlinecode donthyphenate notranslate">objc_glue</span></a></li><li>  <a href="dmd_opover.html" title="dmd.opover"><span class="d_inlinecode donthyphenate notranslate">opover</span></a></li><li>  <a href="dmd_optimize.html" title="dmd.optimize"><span class="d_inlinecode donthyphenate notranslate">optimize</span></a></li><li>  <a href="dmd_parse.html" title="dmd.parse"><span class="d_inlinecode donthyphenate notranslate">parse</span></a></li><li>  <a href="dmd_parsetimevisitor.html" title="dmd.parsetimevisitor"><span class="d_inlinecode donthyphenate notranslate">parsetimevisitor</span></a></li><li>  <a href="dmd_permissivevisitor.html" title="dmd.permissivevisitor"><span class="d_inlinecode donthyphenate notranslate">permissivevisitor</span></a></li><li>  <a href="dmd_printast.html" title="dmd.printast"><span class="d_inlinecode donthyphenate notranslate">printast</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">root</span></h7><ul><li>    <a href="dmd_root_aav.html" title="dmd.root.aav"><span class="d_inlinecode donthyphenate notranslate">aav</span></a></li><li>    <a href="dmd_root_array.html" title="dmd.root.array"><span class="d_inlinecode donthyphenate notranslate">array</span></a></li><li>    <a href="dmd_root_bitarray.html" title="dmd.root.bitarray"><span class="d_inlinecode donthyphenate notranslate">bitarray</span></a></li><li>    <a href="dmd_root_ctfloat.html" title="dmd.root.ctfloat"><span class="d_inlinecode donthyphenate notranslate">ctfloat</span></a></li><li>    <a href="dmd_root_file.html" title="dmd.root.file"><span class="d_inlinecode donthyphenate notranslate">file</span></a></li><li>    <a href="dmd_root_filename.html" title="dmd.root.filename"><span class="d_inlinecode donthyphenate notranslate">filename</span></a></li><li>    <a href="dmd_root_hash.html" title="dmd.root.hash"><span class="d_inlinecode donthyphenate notranslate">hash</span></a></li><li>    <a href="dmd_root_longdouble.html" title="dmd.root.longdouble"><span class="d_inlinecode donthyphenate notranslate">longdouble</span></a></li><li>    <a href="dmd_root_man.html" title="dmd.root.man"><span class="d_inlinecode donthyphenate notranslate">man</span></a></li><li>    <a href="dmd_root_outbuffer.html" title="dmd.root.outbuffer"><span class="d_inlinecode donthyphenate notranslate">outbuffer</span></a></li><li>    <a href="dmd_root_port.html" title="dmd.root.port"><span class="d_inlinecode donthyphenate notranslate">port</span></a></li><li>    <a href="dmd_root_region.html" title="dmd.root.region"><span class="d_inlinecode donthyphenate notranslate">region</span></a></li><li>    <a href="dmd_root_response.html" title="dmd.root.response"><span class="d_inlinecode donthyphenate notranslate">response</span></a></li><li>    <a href="dmd_root_rmem.html" title="dmd.root.rmem"><span class="d_inlinecode donthyphenate notranslate">rmem</span></a></li><li>    <a href="dmd_root_rootobject.html" title="dmd.root.rootobject"><span class="d_inlinecode donthyphenate notranslate">rootobject</span></a></li><li>    <a href="dmd_root_speller.html" title="dmd.root.speller"><span class="d_inlinecode donthyphenate notranslate">speller</span></a></li><li>    <a href="dmd_root_string.html" title="dmd.root.string"><span class="d_inlinecode donthyphenate notranslate">string</span></a></li><li>    <a href="dmd_root_stringtable.html" title="dmd.root.stringtable"><span class="d_inlinecode donthyphenate notranslate">stringtable</span></a></li><li>    <a href="dmd_root_strtold.html" title="dmd.root.strtold"><span class="d_inlinecode donthyphenate notranslate">strtold</span></a>
  147   </li></ul></li><li>  <a href="dmd_s2ir.html" title="dmd.s2ir"><span class="d_inlinecode donthyphenate notranslate">s2ir</span></a></li><li>  <a href="dmd_safe.html" title="dmd.safe"><span class="d_inlinecode donthyphenate notranslate">safe</span></a></li><li>  <a href="dmd_sapply.html" title="dmd.sapply"><span class="d_inlinecode donthyphenate notranslate">sapply</span></a></li><li>  <a href="dmd_scanelf.html" title="dmd.scanelf"><span class="d_inlinecode donthyphenate notranslate">scanelf</span></a></li><li>  <a href="dmd_scanomf.html" title="dmd.scanomf"><span class="d_inlinecode donthyphenate notranslate">scanomf</span></a></li><li>  <a href="dmd_semantic2.html" title="dmd.semantic2"><span class="d_inlinecode donthyphenate notranslate">semantic2</span></a></li><li>  <a href="dmd_semantic3.html" title="dmd.semantic3"><span class="d_inlinecode donthyphenate notranslate">semantic3</span></a></li><li>  <a href="dmd_sideeffect.html" title="dmd.sideeffect"><span class="d_inlinecode donthyphenate notranslate">sideeffect</span></a></li><li>  <a href="dmd_statement.html" title="dmd.statement"><span class="d_inlinecode donthyphenate notranslate">statement</span></a></li><li>  <a href="dmd_statement_rewrite_walker.html" title="dmd.statement_rewrite_walker"><span class="d_inlinecode donthyphenate notranslate">statement_rewrite_walker</span></a></li><li>  <a href="dmd_statementsem.html" title="dmd.statementsem"><span class="d_inlinecode donthyphenate notranslate">statementsem</span></a></li><li>  <a href="dmd_staticassert.html" title="dmd.staticassert"><span class="d_inlinecode donthyphenate notranslate">staticassert</span></a></li><li>  <a href="dmd_staticcond.html" title="dmd.staticcond"><span class="d_inlinecode donthyphenate notranslate">staticcond</span></a></li><li>  <a href="dmd_stmtstate.html" title="dmd.stmtstate"><span class="d_inlinecode donthyphenate notranslate">stmtstate</span></a></li><li>  <a href="dmd_strictvisitor.html" title="dmd.strictvisitor"><span class="d_inlinecode donthyphenate notranslate">strictvisitor</span></a></li><li>  <a href="dmd_target.html" title="dmd.target"><span class="d_inlinecode donthyphenate notranslate">target</span></a></li><li>  <a href="dmd_templateparamsem.html" title="dmd.templateparamsem"><span class="d_inlinecode donthyphenate notranslate">templateparamsem</span></a></li><li>  <a href="dmd_tocsym.html" title="dmd.tocsym"><span class="d_inlinecode donthyphenate notranslate">tocsym</span></a></li><li>  <a href="dmd_toctype.html" title="dmd.toctype"><span class="d_inlinecode donthyphenate notranslate">toctype</span></a></li><li>  <a href="dmd_tocvdebug.html" title="dmd.tocvdebug"><span class="d_inlinecode donthyphenate notranslate">tocvdebug</span></a></li><li>  <a href="dmd_todt.html" title="dmd.todt"><span class="d_inlinecode donthyphenate notranslate">todt</span></a></li><li>  <a href="dmd_toir.html" title="dmd.toir"><span class="d_inlinecode donthyphenate notranslate">toir</span></a></li><li>  <a href="dmd_tokens.html" title="dmd.tokens"><span class="d_inlinecode donthyphenate notranslate">tokens</span></a></li><li>  <a href="dmd_toobj.html" title="dmd.toobj"><span class="d_inlinecode donthyphenate notranslate">toobj</span></a></li><li>  <a href="dmd_traits.html" title="dmd.traits"><span class="d_inlinecode donthyphenate notranslate">traits</span></a></li><li>  <a href="dmd_transitivevisitor.html" title="dmd.transitivevisitor"><span class="d_inlinecode donthyphenate notranslate">transitivevisitor</span></a></li><li>  <a href="dmd_typesem.html" title="dmd.typesem"><span class="d_inlinecode donthyphenate notranslate">typesem</span></a></li><li>  <a href="dmd_typinf.html" title="dmd.typinf"><span class="d_inlinecode donthyphenate notranslate">typinf</span></a></li><li>  <a href="dmd_utf.html" title="dmd.utf"><span class="d_inlinecode donthyphenate notranslate">utf</span></a></li><li>  <a href="dmd_utils.html" title="dmd.utils"><span class="d_inlinecode donthyphenate notranslate">utils</span></a></li><li>  <a href="dmd_visitor.html" title="dmd.visitor"><span class="d_inlinecode donthyphenate notranslate">visitor</span></a></li><li>  <a href="dmd_vsoptions.html" title="dmd.vsoptions"><span class="d_inlinecode donthyphenate notranslate">vsoptions</span></a>
  148 </li></ul>
  149 </li>
  150 
  151 <li class='expand-container modlist-submenu-rt'><a class='expand-toggle' href='#'><span><em class="tt">rt</em></span></a>
  152 <ul><li>  <a href="rt_aApply.html" title="rt.aApply"><span class="d_inlinecode donthyphenate notranslate">aApply</span></a></li><li>  <a href="rt_aApplyR.html" title="rt.aApplyR"><span class="d_inlinecode donthyphenate notranslate">aApplyR</span></a></li><li>  <a href="rt_aaA.html" title="rt.aaA"><span class="d_inlinecode donthyphenate notranslate">aaA</span></a></li><li>  <a href="rt_adi.html" title="rt.adi"><span class="d_inlinecode donthyphenate notranslate">adi</span></a></li><li>  <a href="rt_alloca.html" title="rt.alloca"><span class="d_inlinecode donthyphenate notranslate">alloca</span></a></li><li>  <a href="rt_arrayassign.html" title="rt.arrayassign"><span class="d_inlinecode donthyphenate notranslate">arrayassign</span></a></li><li>  <a href="rt_arraycat.html" title="rt.arraycat"><span class="d_inlinecode donthyphenate notranslate">arraycat</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">backtrace</span></h7><ul><li>    <a href="rt_backtrace_dwarf.html" title="rt.backtrace.dwarf"><span class="d_inlinecode donthyphenate notranslate">dwarf</span></a></li><li>    <a href="rt_backtrace_elf.html" title="rt.backtrace.elf"><span class="d_inlinecode donthyphenate notranslate">elf</span></a></li><li>    <a href="rt_backtrace_macho.html" title="rt.backtrace.macho"><span class="d_inlinecode donthyphenate notranslate">macho</span></a>
  153   </li></ul></li><li>  <a href="rt_cast_.html" title="rt.cast_"><span class="d_inlinecode donthyphenate notranslate">cast_</span></a></li><li>  <a href="rt_cmath2.html" title="rt.cmath2"><span class="d_inlinecode donthyphenate notranslate">cmath2</span></a></li><li>  <a href="rt_config.html" title="rt.config"><span class="d_inlinecode donthyphenate notranslate">config</span></a></li><li>  <a href="rt_cover.html" title="rt.cover"><span class="d_inlinecode donthyphenate notranslate">cover</span></a></li><li>  <a href="rt_critical_.html" title="rt.critical_"><span class="d_inlinecode donthyphenate notranslate">critical_</span></a></li><li>  <a href="rt_deh.html" title="rt.deh"><span class="d_inlinecode donthyphenate notranslate">deh</span></a></li><li>  <a href="rt_deh_win32.html" title="rt.deh_win32"><span class="d_inlinecode donthyphenate notranslate">deh_win32</span></a></li><li>  <a href="rt_deh_win64_posix.html" title="rt.deh_win64_posix"><span class="d_inlinecode donthyphenate notranslate">deh_win64_posix</span></a></li><li>  <a href="rt_dmain2.html" title="rt.dmain2"><span class="d_inlinecode donthyphenate notranslate">dmain2</span></a></li><li>  <a href="rt_dwarfeh.html" title="rt.dwarfeh"><span class="d_inlinecode donthyphenate notranslate">dwarfeh</span></a></li><li>  <a href="rt_ehalloc.html" title="rt.ehalloc"><span class="d_inlinecode donthyphenate notranslate">ehalloc</span></a></li><li>  <a href="rt_invariant.html" title="rt.invariant"><span class="d_inlinecode donthyphenate notranslate">invariant</span></a></li><li>  <a href="rt_lifetime.html" title="rt.lifetime"><span class="d_inlinecode donthyphenate notranslate">lifetime</span></a></li><li>  <a href="rt_llmath.html" title="rt.llmath"><span class="d_inlinecode donthyphenate notranslate">llmath</span></a></li><li>  <a href="rt_memory.html" title="rt.memory"><span class="d_inlinecode donthyphenate notranslate">memory</span></a></li><li>  <a href="rt_memset.html" title="rt.memset"><span class="d_inlinecode donthyphenate notranslate">memset</span></a></li><li>  <a href="rt_minfo.html" title="rt.minfo"><span class="d_inlinecode donthyphenate notranslate">minfo</span></a></li><li>  <a href="rt_monitor_.html" title="rt.monitor_"><span class="d_inlinecode donthyphenate notranslate">monitor_</span></a></li><li>  <a href="rt_profilegc.html" title="rt.profilegc"><span class="d_inlinecode donthyphenate notranslate">profilegc</span></a></li><li>  <a href="rt_qsort.html" title="rt.qsort"><span class="d_inlinecode donthyphenate notranslate">qsort</span></a></li><li>  <a href="rt_sections.html" title="rt.sections"><span class="d_inlinecode donthyphenate notranslate">sections</span></a></li><li>  <a href="rt_sections_android.html" title="rt.sections_android"><span class="d_inlinecode donthyphenate notranslate">sections_android</span></a></li><li>  <a href="rt_sections_darwin_64.html" title="rt.sections_darwin_64"><span class="d_inlinecode donthyphenate notranslate">sections_darwin_64</span></a></li><li>  <a href="rt_sections_elf_shared.html" title="rt.sections_elf_shared"><span class="d_inlinecode donthyphenate notranslate">sections_elf_shared</span></a></li><li>  <a href="rt_sections_osx_x86.html" title="rt.sections_osx_x86"><span class="d_inlinecode donthyphenate notranslate">sections_osx_x86</span></a></li><li>  <a href="rt_sections_osx_x86_64.html" title="rt.sections_osx_x86_64"><span class="d_inlinecode donthyphenate notranslate">sections_osx_x86_64</span></a></li><li>  <a href="rt_sections_solaris.html" title="rt.sections_solaris"><span class="d_inlinecode donthyphenate notranslate">sections_solaris</span></a></li><li>  <a href="rt_sections_win32.html" title="rt.sections_win32"><span class="d_inlinecode donthyphenate notranslate">sections_win32</span></a></li><li>  <a href="rt_sections_win64.html" title="rt.sections_win64"><span class="d_inlinecode donthyphenate notranslate">sections_win64</span></a></li><li>  <a href="rt_tlsgc.html" title="rt.tlsgc"><span class="d_inlinecode donthyphenate notranslate">tlsgc</span></a></li><li>  <a href="rt_trace.html" title="rt.trace"><span class="d_inlinecode donthyphenate notranslate">trace</span></a></li><li>  <a href="rt_tracegc.html" title="rt.tracegc"><span class="d_inlinecode donthyphenate notranslate">tracegc</span></a></li><li>  <a href="rt_unwind.html" title="rt.unwind"><span class="d_inlinecode donthyphenate notranslate">unwind</span></a></li><li>  <h7><span class="d_inlinecode donthyphenate notranslate">util</span></h7><ul><li>    <h7><span class="d_inlinecode donthyphenate notranslate">container</span></h7><ul><li>      <a href="rt_util_container_array.html" title="rt.util.container.array"><span class="d_inlinecode donthyphenate notranslate">array</span></a></li><li>      <a href="rt_util_container_common.html" title="rt.util.container.common"><span class="d_inlinecode donthyphenate notranslate">common</span></a></li><li>      <a href="rt_util_container_hashtab.html" title="rt.util.container.hashtab"><span class="d_inlinecode donthyphenate notranslate">hashtab</span></a></li><li>      <a href="rt_util_container_treap.html" title="rt.util.container.treap"><span class="d_inlinecode donthyphenate notranslate">treap</span></a>
  154     </li></ul></li><li>    <a href="rt_util_random.html" title="rt.util.random"><span class="d_inlinecode donthyphenate notranslate">random</span></a></li><li>    <a href="rt_util_typeinfo.html" title="rt.util.typeinfo"><span class="d_inlinecode donthyphenate notranslate">typeinfo</span></a></li><li>    <a href="rt_util_utility.html" title="rt.util.utility"><span class="d_inlinecode donthyphenate notranslate">utility</span></a>
  155   </li></ul>
  156 </li></ul>
  157 </li></ul>
  158 </div>
  159     <div class="hyphenate" id="content">        
  160 <div id="tools"><div >  <div class="tip smallprint">        <a href="https://issues.dlang.org/enter_bug.cgi?bug_file_loc=http%3A%2F%2Fdlang.org/phobos/&amp;component=phobos&amp;op_sys=All&amp;priority=P3&amp;product=D&amp;rep_platform=All&amp;short_desc=%5Bstd.traits%5D&amp;version=D2&amp;bug_severity=enhancement">Report a bug</a>
  161         <div >          If you spot a problem with this page, click here to create a Bugzilla issue.
  162         </div>
  163     </div>
  164     <div class="tip smallprint">        <a href="https://github.com/dlang/phobos/edit/master/std/traits.d">Improve this page</a>
  165         <div >          Quickly fork, edit online, and submit a pull request for this page.
  166             Requires a signed-in GitHub account. This works well for small changes.
  167             If you'd like to make larger changes you may want to consider using
  168             a local clone.
  169         </div>
  170     </div>
  171 </div></div>
  172         <h1><span class="d_title">std.traits</span></h1>
  173         <div class="quickindex" id="quickindex"></div>
  174         <div class="summary">Templates which extract information about types and symbols at compile time.
  175 </div><div class="description"><script type="text/javascript">inhibitQuickIndex = 1;</script>
  176 <div class="blankline"></div>
  177 
  178  <div class="quickindex"> <table class="book"><caption></caption> <tr><th scope="col">Category</th> <th scope="col">Templates</th></tr>
  179  <tr><td>Symbol Name traits</td> <td>           <a href="#fullyQualifiedName"><span class="d_inlinecode donthyphenate notranslate">fullyQualifiedName</span></a>
  180            <a href="#moduleName"><span class="d_inlinecode donthyphenate notranslate">moduleName</span></a>
  181            <a href="#packageName"><span class="d_inlinecode donthyphenate notranslate">packageName</span></a>
  182  </td></tr>
  183  <tr><td>Function traits</td> <td>           <a href="#isFunction"><span class="d_inlinecode donthyphenate notranslate">isFunction</span></a>
  184            <a href="#arity"><span class="d_inlinecode donthyphenate notranslate">arity</span></a>
  185            <a href="#functionAttributes"><span class="d_inlinecode donthyphenate notranslate">functionAttributes</span></a>
  186            <a href="#hasFunctionAttributes"><span class="d_inlinecode donthyphenate notranslate">hasFunctionAttributes</span></a>
  187            <a href="#functionLinkage"><span class="d_inlinecode donthyphenate notranslate">functionLinkage</span></a>
  188            <a href="#FunctionTypeOf"><span class="d_inlinecode donthyphenate notranslate">FunctionTypeOf</span></a>
  189            <a href="#isSafe"><span class="d_inlinecode donthyphenate notranslate">isSafe</span></a>
  190            <a href="#isUnsafe"><span class="d_inlinecode donthyphenate notranslate">isUnsafe</span></a>
  191            <a href="#isFinal"><span class="d_inlinecode donthyphenate notranslate">isFinal</span></a>
  192            <a href="#ParameterDefaults"><span class="d_inlinecode donthyphenate notranslate">ParameterDefaults</span></a>
  193            <a href="#ParameterIdentifierTuple"><span class="d_inlinecode donthyphenate notranslate">ParameterIdentifierTuple</span></a>
  194            <a href="#ParameterStorageClassTuple"><span class="d_inlinecode donthyphenate notranslate">ParameterStorageClassTuple</span></a>
  195            <a href="#Parameters"><span class="d_inlinecode donthyphenate notranslate">Parameters</span></a>
  196            <a href="#ReturnType"><span class="d_inlinecode donthyphenate notranslate">ReturnType</span></a>
  197            <a href="#SetFunctionAttributes"><span class="d_inlinecode donthyphenate notranslate">SetFunctionAttributes</span></a>
  198            <a href="#variadicFunctionStyle"><span class="d_inlinecode donthyphenate notranslate">variadicFunctionStyle</span></a>
  199  </td></tr>
  200  <tr><td>Aggregate Type traits</td> <td>           <a href="#BaseClassesTuple"><span class="d_inlinecode donthyphenate notranslate">BaseClassesTuple</span></a>
  201            <a href="#BaseTypeTuple"><span class="d_inlinecode donthyphenate notranslate">BaseTypeTuple</span></a>
  202            <a href="#classInstanceAlignment"><span class="d_inlinecode donthyphenate notranslate">classInstanceAlignment</span></a>
  203            <a href="#EnumMembers"><span class="d_inlinecode donthyphenate notranslate">EnumMembers</span></a>
  204            <a href="#FieldNameTuple"><span class="d_inlinecode donthyphenate notranslate">FieldNameTuple</span></a>
  205            <a href="#Fields"><span class="d_inlinecode donthyphenate notranslate">Fields</span></a>
  206            <a href="#hasAliasing"><span class="d_inlinecode donthyphenate notranslate">hasAliasing</span></a>
  207            <a href="#hasElaborateAssign"><span class="d_inlinecode donthyphenate notranslate">hasElaborateAssign</span></a>
  208            <a href="#hasElaborateCopyConstructor"><span class="d_inlinecode donthyphenate notranslate">hasElaborateCopyConstructor</span></a>
  209            <a href="#hasElaborateDestructor"><span class="d_inlinecode donthyphenate notranslate">hasElaborateDestructor</span></a>
  210            <a href="#hasElaborateMove"><span class="d_inlinecode donthyphenate notranslate">hasElaborateMove</span></a>
  211            <a href="#hasIndirections"><span class="d_inlinecode donthyphenate notranslate">hasIndirections</span></a>
  212            <a href="#hasMember"><span class="d_inlinecode donthyphenate notranslate">hasMember</span></a>
  213            <a href="#hasStaticMember"><span class="d_inlinecode donthyphenate notranslate">hasStaticMember</span></a>
  214            <a href="#hasNested"><span class="d_inlinecode donthyphenate notranslate">hasNested</span></a>
  215            <a href="#hasUnsharedAliasing"><span class="d_inlinecode donthyphenate notranslate">hasUnsharedAliasing</span></a>
  216            <a href="#InterfacesTuple"><span class="d_inlinecode donthyphenate notranslate">InterfacesTuple</span></a>
  217            <a href="#isInnerClass"><span class="d_inlinecode donthyphenate notranslate">isInnerClass</span></a>
  218            <a href="#isNested"><span class="d_inlinecode donthyphenate notranslate">isNested</span></a>
  219            <a href="#MemberFunctionsTuple"><span class="d_inlinecode donthyphenate notranslate">MemberFunctionsTuple</span></a>
  220            <a href="#RepresentationTypeTuple"><span class="d_inlinecode donthyphenate notranslate">RepresentationTypeTuple</span></a>
  221            <a href="#TemplateArgsOf"><span class="d_inlinecode donthyphenate notranslate">TemplateArgsOf</span></a>
  222            <a href="#TemplateOf"><span class="d_inlinecode donthyphenate notranslate">TemplateOf</span></a>
  223            <a href="#TransitiveBaseTypeTuple"><span class="d_inlinecode donthyphenate notranslate">TransitiveBaseTypeTuple</span></a>
  224  </td></tr>
  225  <tr><td>Type Conversion</td> <td>           <a href="#CommonType"><span class="d_inlinecode donthyphenate notranslate">CommonType</span></a>
  226            <a href="#ImplicitConversionTargets"><span class="d_inlinecode donthyphenate notranslate">ImplicitConversionTargets</span></a>
  227            <a href="#CopyTypeQualifiers"><span class="d_inlinecode donthyphenate notranslate">CopyTypeQualifiers</span></a>
  228            <a href="#CopyConstness"><span class="d_inlinecode donthyphenate notranslate">CopyConstness</span></a>
  229            <a href="#isAssignable"><span class="d_inlinecode donthyphenate notranslate">isAssignable</span></a>
  230            <a href="#isCovariantWith"><span class="d_inlinecode donthyphenate notranslate">isCovariantWith</span></a>
  231            <a href="#isImplicitlyConvertible"><span class="d_inlinecode donthyphenate notranslate">isImplicitlyConvertible</span></a>
  232  </td></tr>
  233  <tr><td>SomethingTypeOf</td> <td>           <a href="#rvalueOf"><span class="d_inlinecode donthyphenate notranslate">rvalueOf</span></a>
  234            <a href="#lvalueOf"><span class="d_inlinecode donthyphenate notranslate">lvalueOf</span></a>
  235            <a href="#InoutOf"><span class="d_inlinecode donthyphenate notranslate">InoutOf</span></a>
  236            <a href="#ConstOf"><span class="d_inlinecode donthyphenate notranslate">ConstOf</span></a>
  237            <a href="#SharedOf"><span class="d_inlinecode donthyphenate notranslate">SharedOf</span></a>
  238            <a href="#SharedInoutOf"><span class="d_inlinecode donthyphenate notranslate">SharedInoutOf</span></a>
  239            <a href="#SharedConstOf"><span class="d_inlinecode donthyphenate notranslate">SharedConstOf</span></a>
  240            <a href="#ImmutableOf"><span class="d_inlinecode donthyphenate notranslate">ImmutableOf</span></a>
  241            <a href="#QualifierOf"><span class="d_inlinecode donthyphenate notranslate">QualifierOf</span></a>
  242  </td></tr>
  243  <tr><td>Categories of types</td> <td>           <a href="#allSameType"><span class="d_inlinecode donthyphenate notranslate">allSameType</span></a>
  244            <a href="#ifTestable"><span class="d_inlinecode donthyphenate notranslate">ifTestable</span></a>
  245            <a href="#isType"><span class="d_inlinecode donthyphenate notranslate">isType</span></a>
  246            <a href="#isAggregateType"><span class="d_inlinecode donthyphenate notranslate">isAggregateType</span></a>
  247            <a href="#isArray"><span class="d_inlinecode donthyphenate notranslate">isArray</span></a>
  248            <a href="#isAssociativeArray"><span class="d_inlinecode donthyphenate notranslate">isAssociativeArray</span></a>
  249            <a href="#isAutodecodableString"><span class="d_inlinecode donthyphenate notranslate">isAutodecodableString</span></a>
  250            <a href="#isBasicType"><span class="d_inlinecode donthyphenate notranslate">isBasicType</span></a>
  251            <a href="#isBoolean"><span class="d_inlinecode donthyphenate notranslate">isBoolean</span></a>
  252            <a href="#isBuiltinType"><span class="d_inlinecode donthyphenate notranslate">isBuiltinType</span></a>
  253            <a href="#isCopyable"><span class="d_inlinecode donthyphenate notranslate">isCopyable</span></a>
  254            <a href="#isDynamicArray"><span class="d_inlinecode donthyphenate notranslate">isDynamicArray</span></a>
  255            <a href="#isEqualityComparable"><span class="d_inlinecode donthyphenate notranslate">isEqualityComparable</span></a>
  256            <a href="#isFloatingPoint"><span class="d_inlinecode donthyphenate notranslate">isFloatingPoint</span></a>
  257            <a href="#isIntegral"><span class="d_inlinecode donthyphenate notranslate">isIntegral</span></a>
  258            <a href="#isNarrowString"><span class="d_inlinecode donthyphenate notranslate">isNarrowString</span></a>
  259            <a href="#isConvertibleToString"><span class="d_inlinecode donthyphenate notranslate">isConvertibleToString</span></a>
  260            <a href="#isNumeric"><span class="d_inlinecode donthyphenate notranslate">isNumeric</span></a>
  261            <a href="#isOrderingComparable"><span class="d_inlinecode donthyphenate notranslate">isOrderingComparable</span></a>
  262            <a href="#isPointer"><span class="d_inlinecode donthyphenate notranslate">isPointer</span></a>
  263            <a href="#isScalarType"><span class="d_inlinecode donthyphenate notranslate">isScalarType</span></a>
  264            <a href="#isSigned"><span class="d_inlinecode donthyphenate notranslate">isSigned</span></a>
  265            <a href="#isSIMDVector"><span class="d_inlinecode donthyphenate notranslate">isSIMDVector</span></a>
  266            <a href="#isSomeChar"><span class="d_inlinecode donthyphenate notranslate">isSomeChar</span></a>
  267            <a href="#isSomeString"><span class="d_inlinecode donthyphenate notranslate">isSomeString</span></a>
  268            <a href="#isStaticArray"><span class="d_inlinecode donthyphenate notranslate">isStaticArray</span></a>
  269            <a href="#isUnsigned"><span class="d_inlinecode donthyphenate notranslate">isUnsigned</span></a>
  270  </td></tr>
  271  <tr><td>Type behaviours</td> <td>           <a href="#isAbstractClass"><span class="d_inlinecode donthyphenate notranslate">isAbstractClass</span></a>
  272            <a href="#isAbstractFunction"><span class="d_inlinecode donthyphenate notranslate">isAbstractFunction</span></a>
  273            <a href="#isCallable"><span class="d_inlinecode donthyphenate notranslate">isCallable</span></a>
  274            <a href="#isDelegate"><span class="d_inlinecode donthyphenate notranslate">isDelegate</span></a>
  275            <a href="#isExpressions"><span class="d_inlinecode donthyphenate notranslate">isExpressions</span></a>
  276            <a href="#isFinalClass"><span class="d_inlinecode donthyphenate notranslate">isFinalClass</span></a>
  277            <a href="#isFinalFunction"><span class="d_inlinecode donthyphenate notranslate">isFinalFunction</span></a>
  278            <a href="#isFunctionPointer"><span class="d_inlinecode donthyphenate notranslate">isFunctionPointer</span></a>
  279            <a href="#isInstanceOf"><span class="d_inlinecode donthyphenate notranslate">isInstanceOf</span></a>
  280            <a href="#isIterable"><span class="d_inlinecode donthyphenate notranslate">isIterable</span></a>
  281            <a href="#isMutable"><span class="d_inlinecode donthyphenate notranslate">isMutable</span></a>
  282            <a href="#isSomeFunction"><span class="d_inlinecode donthyphenate notranslate">isSomeFunction</span></a>
  283            <a href="#isTypeTuple"><span class="d_inlinecode donthyphenate notranslate">isTypeTuple</span></a>
  284  </td></tr>
  285  <tr><td>General Types</td> <td>           <a href="#ForeachType"><span class="d_inlinecode donthyphenate notranslate">ForeachType</span></a>
  286            <a href="#KeyType"><span class="d_inlinecode donthyphenate notranslate">KeyType</span></a>
  287            <a href="#Largest"><span class="d_inlinecode donthyphenate notranslate">Largest</span></a>
  288            <a href="#mostNegative"><span class="d_inlinecode donthyphenate notranslate">mostNegative</span></a>
  289            <a href="#OriginalType"><span class="d_inlinecode donthyphenate notranslate">OriginalType</span></a>
  290            <a href="#PointerTarget"><span class="d_inlinecode donthyphenate notranslate">PointerTarget</span></a>
  291            <a href="#Signed"><span class="d_inlinecode donthyphenate notranslate">Signed</span></a>
  292            <a href="#Unconst"><span class="d_inlinecode donthyphenate notranslate">Unconst</span></a>
  293            <a href="#Unqual"><span class="d_inlinecode donthyphenate notranslate">Unqual</span></a>
  294            <a href="#Unsigned"><span class="d_inlinecode donthyphenate notranslate">Unsigned</span></a>
  295            <a href="#ValueType"><span class="d_inlinecode donthyphenate notranslate">ValueType</span></a>
  296            <a href="#Promoted"><span class="d_inlinecode donthyphenate notranslate">Promoted</span></a>
  297  </td></tr>
  298  <tr><td>Misc</td> <td>           <a href="#mangledName"><span class="d_inlinecode donthyphenate notranslate">mangledName</span></a>
  299            <a href="#Select"><span class="d_inlinecode donthyphenate notranslate">Select</span></a>
  300            <a href="#select"><span class="d_inlinecode donthyphenate notranslate">select</span></a>
  301  </td></tr>
  302  <tr><td>User-Defined Attributes</td> <td>           <a href="#hasUDA"><span class="d_inlinecode donthyphenate notranslate">hasUDA</span></a>
  303            <a href="#getUDAs"><span class="d_inlinecode donthyphenate notranslate">getUDAs</span></a>
  304            <a href="#getSymbolsByUDA"><span class="d_inlinecode donthyphenate notranslate">getSymbolsByUDA</span></a>
  305  </td></tr>
  306  </table>
  307  </div>
  308 
  309 </div>
  310 <div class="keyval License"><span class="key keyLicense">License:</span> <div class="val valLicense"><a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
  311 </div></div>
  312 <div class="keyval Authors"><span class="key keyAuthors">Authors:</span> <div class="val valAuthors"><a href="http://digitalmars.com">Walter Bright</a>,
  313             Tomasz Stachowiak (<span class="d_inlinecode donthyphenate notranslate">isExpressions</span>),
  314             <a href="http://erdani.org">Andrei Alexandrescu</a>,
  315             Shin Fujishiro,
  316             <a href="http://octarineparrot.com">Robert Clipsham</a>,
  317             <a href="http://klickverbot.at">David Nadlinger</a>,
  318             Kenji Hara,
  319             Shoichi Kato
  320 </div></div>
  321 <div class="val"><p class="keyval Section"><span class="key keySection">Source</span>
  322 <span class="phobos_src"><a class="https" href="https://github.com/dlang/phobos/blob/master/std/traits.d">std/traits.d</a></span></p></div>
  323 
  324 <dl><dt class="d_decl"><div ><span class="def-anchor" id=".InoutOf"></span><div class="quickindex" id="quickindex.InoutOf"></div>template <span class="def-anchor" id="InoutOf"></span><code class="ddoc_psymbol">InoutOf</code>(T)<br></div></dt>
  325 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  326 <td class="param_desc">The type to qualify</td></tr>
  327 </table></div></div>
  328 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">T</span> with the <span class="d_inlinecode donthyphenate notranslate">inout</span> qualifier added.</div></div>
  329 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">InoutOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">inout</span> <span class="d_keyword">int</span>));
  330 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">InoutOf</span>!(<span class="d_keyword">inout</span> <span class="d_keyword">int</span>) == <span class="d_keyword">inout</span> <span class="d_keyword">int</span>));
  331 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">InoutOf</span>!(<span class="d_keyword">const</span> <span class="d_keyword">int</span>) == <span class="d_keyword">inout</span> <span class="d_keyword">const</span> <span class="d_keyword">int</span>));
  332 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">InoutOf</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">int</span>) == <span class="d_keyword">inout</span> <span class="d_keyword">shared</span> <span class="d_keyword">int</span>));
  333 </pre>
  334 </div></div>
  335 
  336 </dd>
  337 <dt class="d_decl"><div ><span class="def-anchor" id=".ConstOf"></span><div class="quickindex" id="quickindex.ConstOf"></div>template <span class="def-anchor" id="ConstOf"></span><code class="ddoc_psymbol">ConstOf</code>(T)<br></div></dt>
  338 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  339 <td class="param_desc">The type to qualify</td></tr>
  340 </table></div></div>
  341 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">T</span> with the <span class="d_inlinecode donthyphenate notranslate">const</span> qualifier added.</div></div>
  342 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ConstOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">const</span> <span class="d_keyword">int</span>));
  343 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ConstOf</span>!(<span class="d_keyword">const</span> <span class="d_keyword">int</span>) == <span class="d_keyword">const</span> <span class="d_keyword">int</span>));
  344 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ConstOf</span>!(<span class="d_keyword">inout</span> <span class="d_keyword">int</span>) == <span class="d_keyword">const</span> <span class="d_keyword">inout</span> <span class="d_keyword">int</span>));
  345 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ConstOf</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">int</span>) == <span class="d_keyword">const</span> <span class="d_keyword">shared</span> <span class="d_keyword">int</span>));
  346 </pre>
  347 </div></div>
  348 
  349 </dd>
  350 <dt class="d_decl"><div ><span class="def-anchor" id=".SharedOf"></span><div class="quickindex" id="quickindex.SharedOf"></div>template <span class="def-anchor" id="SharedOf"></span><code class="ddoc_psymbol">SharedOf</code>(T)<br></div></dt>
  351 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  352 <td class="param_desc">The type to qualify</td></tr>
  353 </table></div></div>
  354 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">T</span> with the <span class="d_inlinecode donthyphenate notranslate">shared</span> qualifier added.</div></div>
  355 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">int</span>));
  356 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedOf</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">int</span>));
  357 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedOf</span>!(<span class="d_keyword">inout</span> <span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">int</span>));
  358 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedOf</span>!(<span class="d_keyword">immutable</span> <span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  359 </pre>
  360 </div></div>
  361 
  362 </dd>
  363 <dt class="d_decl"><div ><span class="def-anchor" id=".SharedInoutOf"></span><div class="quickindex" id="quickindex.SharedInoutOf"></div>template <span class="def-anchor" id="SharedInoutOf"></span><code class="ddoc_psymbol">SharedInoutOf</code>(T)<br></div></dt>
  364 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  365 <td class="param_desc">The type to qualify</td></tr>
  366 </table></div></div>
  367 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">T</span> with the <span class="d_inlinecode donthyphenate notranslate">inout</span> and <span class="d_inlinecode donthyphenate notranslate">shared</span> qualifiers added.</div></div>
  368 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedInoutOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">int</span>));
  369 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedInoutOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">inout</span> <span class="d_keyword">shared</span> <span class="d_keyword">int</span>));
  370 
  371 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedInoutOf</span>!(<span class="d_keyword">const</span> <span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">const</span> <span class="d_keyword">int</span>));
  372 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedInoutOf</span>!(<span class="d_keyword">immutable</span> <span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  373 </pre>
  374 </div></div>
  375 
  376 </dd>
  377 <dt class="d_decl"><div ><span class="def-anchor" id=".SharedConstOf"></span><div class="quickindex" id="quickindex.SharedConstOf"></div>template <span class="def-anchor" id="SharedConstOf"></span><code class="ddoc_psymbol">SharedConstOf</code>(T)<br></div></dt>
  378 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  379 <td class="param_desc">The type to qualify</td></tr>
  380 </table></div></div>
  381 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">T</span> with the <span class="d_inlinecode donthyphenate notranslate">const</span> and <span class="d_inlinecode donthyphenate notranslate">shared</span> qualifiers added.</div></div>
  382 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedConstOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">const</span> <span class="d_keyword">int</span>));
  383 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedConstOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">const</span> <span class="d_keyword">shared</span> <span class="d_keyword">int</span>));
  384 
  385 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedConstOf</span>!(<span class="d_keyword">inout</span> <span class="d_keyword">int</span>) == <span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">const</span> <span class="d_keyword">int</span>));
  386 <span class="d_comment">// immutable variables are implicitly shared and const
  387 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">SharedConstOf</span>!(<span class="d_keyword">immutable</span> <span class="d_keyword">int</span>) == <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  388 </pre>
  389 </div></div>
  390 
  391 </dd>
  392 <dt class="d_decl"><div ><span class="def-anchor" id=".ImmutableOf"></span><div class="quickindex" id="quickindex.ImmutableOf"></div>template <span class="def-anchor" id="ImmutableOf"></span><code class="ddoc_psymbol">ImmutableOf</code>(T)<br></div></dt>
  393 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  394 <td class="param_desc">The type to qualify</td></tr>
  395 </table></div></div>
  396 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">T</span> with the <span class="d_inlinecode donthyphenate notranslate">immutable</span> qualifier added.</div></div>
  397 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImmutableOf</span>!(<span class="d_keyword">int</span>) == <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  398 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImmutableOf</span>!(<span class="d_keyword">const</span> <span class="d_keyword">int</span>) == <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  399 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImmutableOf</span>!(<span class="d_keyword">inout</span> <span class="d_keyword">int</span>) == <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  400 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImmutableOf</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">int</span>) == <span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
  401 </pre>
  402 </div></div>
  403 
  404 </dd>
  405 <dt class="d_decl"><div ><span class="def-anchor" id=".QualifierOf"></span><div class="quickindex" id="quickindex.QualifierOf"></div>template <span class="def-anchor" id="QualifierOf"></span><code class="ddoc_psymbol">QualifierOf</code>(T)<br></div></dt>
  406 <dd><div class="summary">Gives a template that can be used to apply the same
  407  attributes that are on the given type <span class="d_inlinecode donthyphenate notranslate">T</span>. E.g. passing
  408  <span class="d_inlinecode donthyphenate notranslate">inout shared int</span> will return <span class="d_inlinecode donthyphenate notranslate">SharedInoutOf</span>.
  409 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  410 <td class="param_desc">the type to check qualifiers from</td></tr>
  411 </table></div></div>
  412 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">The qualifier template from the given type <span class="d_inlinecode donthyphenate notranslate">T</span></div></div>
  413 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(isSame, <span class="d_psymbol">QualifierOf</span>!(<span class="d_keyword">immutable</span> <span class="d_keyword">int</span>), ImmutableOf));
  414 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(isSame, <span class="d_psymbol">QualifierOf</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">int</span>), SharedOf));
  415 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(isSame, <span class="d_psymbol">QualifierOf</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">int</span>), SharedInoutOf));
  416 </pre>
  417 </div></div>
  418 
  419 </dd>
  420 <dt class="d_decl"><div ><span class="def-anchor" id=".packageName"></span><div class="quickindex" id="quickindex.packageName"></div>template <span class="def-anchor" id="packageName"></span><code class="ddoc_psymbol">packageName</code>(alias T)<br></div></dt>
  421 <dd><div class="summary">Get the full package name for the given symbol.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">packageName</span>!<span class="d_psymbol">packageName</span> == <span class="d_string">"std"</span>);
  422 </pre>
  423 </div></div>
  424 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">packageName</span>!moduleName == <span class="d_string">"std"</span>);
  425 </pre>
  426 </div></div>
  427 
  428 </dd>
  429 <dt class="d_decl"><div ><span class="def-anchor" id=".moduleName"></span><div class="quickindex" id="quickindex.moduleName"></div>template <span class="def-anchor" id="moduleName"></span><code class="ddoc_psymbol">moduleName</code>(alias T)<br></div></dt>
  430 <dd><div class="summary">Get the module name (including package) for the given symbol.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">moduleName</span>!<span class="d_psymbol">moduleName</span> == <span class="d_string">"std.traits"</span>);
  431 </pre>
  432 </div></div>
  433 
  434 </dd>
  435 <dt class="d_decl"><div ><span class="def-anchor" id=".fullyQualifiedName"></span><div class="quickindex" id="quickindex.fullyQualifiedName"></div>template <span class="def-anchor" id="fullyQualifiedName"></span><code class="ddoc_psymbol">fullyQualifiedName</code>(T...) if (T.length == 1)<br></div></dt>
  436 <dd><div class="summary">Get the fully qualified name of a type or a symbol. Can act as an intelligent type/symbol to string  converter.
  437 </div><div class="val"><p class="keyval Section"><span class="key keySection">Example</span>
  438 <pre class="d_code notranslate"><span class="d_keyword">module</span> myModule;
  439 <span class="d_keyword">struct</span> MyStruct {}
  440 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">fullyQualifiedName</span>!(<span class="d_keyword">const</span> MyStruct[]) == <span class="d_string">"const(myModule.MyStruct[])"</span>);
  441 </pre>
  442 </p></div>
  443 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">fullyQualifiedName</span>!<span class="d_psymbol">fullyQualifiedName</span> == <span class="d_string">"std.traits.fullyQualifiedName"</span>);
  444 </pre>
  445 </div></div>
  446 
  447 </dd>
  448 <dt class="d_decl"><div ><span class="def-anchor" id=".ReturnType"></span><div class="quickindex" id="quickindex.ReturnType"></div>template <span class="def-anchor" id="ReturnType"></span><code class="ddoc_psymbol">ReturnType</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  449 <dd><div class="summary">Get the type of the return value from a function,
  450  a pointer to function, a delegate, a struct
  451  with an opCall, a pointer to a struct with an opCall,
  452  or a class with an <span class="d_inlinecode donthyphenate notranslate">opCall</span>. Please note that <span class="d_keyword">ref</span>
  453  is not part of a type, but the attribute of the function
  454  (see template <a href="#functionAttributes"><span class="d_inlinecode donthyphenate notranslate">functionAttributes</span></a>).</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">int</span> foo();
  455 <span class="d_psymbol">ReturnType</span>!foo x;   <span class="d_comment">// x is declared as int
  456 </span></pre>
  457 </div></div>
  458 
  459 </dd>
  460 <dt class="d_decl"><div ><span class="def-anchor" id=".Parameters"></span><div class="quickindex" id="quickindex.Parameters"></div>template <span class="def-anchor" id="Parameters"></span><code class="ddoc_psymbol">Parameters</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  461 <dd><div class="summary">Get, as a tuple, the types of the parameters to a function, a pointer
  462 to function, a delegate, a struct with an <span class="d_inlinecode donthyphenate notranslate">opCall</span>, a pointer to a
  463 struct with an <span class="d_inlinecode donthyphenate notranslate">opCall</span>, or a class with an <span class="d_inlinecode donthyphenate notranslate">opCall</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">int</span> foo(<span class="d_keyword">int</span>, <span class="d_keyword">long</span>);
  464 <span class="d_keyword">void</span> bar(<span class="d_psymbol">Parameters</span>!foo);      <span class="d_comment">// declares void bar(int, long);
  465 </span><span class="d_keyword">void</span> abc(<span class="d_psymbol">Parameters</span>!foo[1]);   <span class="d_comment">// declares void abc(long);
  466 </span></pre>
  467 </div></div>
  468 
  469 </dd>
  470 <dt class="d_decl"><div ><span class="def-anchor" id=".ParameterTypeTuple"></span><div class="quickindex" id="quickindex.ParameterTypeTuple"></div>alias <span class="def-anchor" id="ParameterTypeTuple"></span><code class="ddoc_psymbol">ParameterTypeTuple</code> = Parameters(func...) if (func.length == 1 &amp;&amp; isCallable!func);
  471 <br></div></dt>
  472 <dd><div class="summary">Alternate name for <a href="#Parameters"><span class="d_inlinecode donthyphenate notranslate">Parameters</span></a>, kept for legacy compatibility.</div>
  473 </dd>
  474 <dt class="d_decl"><div ><span class="def-anchor" id=".arity"></span><div class="quickindex" id="quickindex.arity"></div>template <span class="def-anchor" id="arity"></span><code class="ddoc_psymbol">arity</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func &amp;&amp; (variadicFunctionStyle!func == Variadic.no))<br></div></dt>
  475 <dd><div class="summary">Returns the number of arguments of function <span class="d_inlinecode donthyphenate notranslate">func</span>.
  476 arity is undefined for variadic functions.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">void</span> foo(){}
  477 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">arity</span>!foo == 0);
  478 <span class="d_keyword">void</span> bar(<span class="d_keyword">uint</span>){}
  479 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">arity</span>!bar == 1);
  480 <span class="d_keyword">void</span> variadicFoo(<span class="d_keyword">uint</span>...){}
  481 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_keyword">__traits</span>(compiles, <span class="d_psymbol">arity</span>!variadicFoo));
  482 </pre>
  483 </div></div>
  484 
  485 </dd>
  486 <dt class="d_decl"><div ><span class="def-anchor" id=".ParameterStorageClass"></span><div class="quickindex" id="quickindex.ParameterStorageClass"></div>enum <span class="def-anchor" id="ParameterStorageClass"></span><code class="ddoc_psymbol">ParameterStorageClass</code>: uint;
  487 <br><br><span class="def-anchor" id=".ParameterStorageClassTuple"></span><div class="quickindex" id="quickindex.ParameterStorageClassTuple"></div>template <span class="def-anchor" id="ParameterStorageClassTuple"></span><code class="ddoc_psymbol">ParameterStorageClassTuple</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  488 <dd><div class="summary">Get tuple, one per function parameter, of the storage classes of the parameters.
  489 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">func</td>
  490 <td class="param_desc">function symbol or type of function, delegate, or pointer to function</td></tr>
  491 </table></div></div>
  492 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">A tuple of ParameterStorageClass bits</div></div>
  493 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">alias</span> STC = <span class="d_psymbol">ParameterStorageClass</span>; <span class="d_comment">// shorten the enum name
  494 </span>
  495 <span class="d_keyword">void</span> func(<span class="d_keyword">ref</span> <span class="d_keyword">int</span> ctx, <span class="d_keyword">out</span> <span class="d_keyword">real</span> result, <span class="d_keyword">in</span> <span class="d_keyword">real</span> param, <span class="d_keyword">void</span>* ptr)
  496 {
  497 }
  498 <span class="d_keyword">alias</span> pstc = <span class="d_psymbol">ParameterStorageClassTuple</span>!func;
  499 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(pstc.length == 4); <span class="d_comment">// number of parameters
  500 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(pstc[0] == STC.ref_);
  501 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(pstc[1] == STC.out_);
  502 <span class="d_keyword">version</span> (none)
  503 {
  504     <span class="d_comment">// TODO: When the DMD PR (dlang/dmd#11474) gets merged,
  505 </span>    <span class="d_comment">// remove the versioning and the second test
  506 </span>    <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(pstc[2] == STC.in_);
  507     <span class="d_comment">// This is the current behavior, before `in` is fixed to not be an alias
  508 </span>    <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(pstc[2] == STC.scope_);
  509 }
  510 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(pstc[3] == STC.none);
  511 </pre>
  512 </div></div>
  513 
  514 <dl><dt class="d_decl"><div ><span class="def-anchor" id=".ParameterStorageClass.none"></span><div class="quickindex" id="quickindex.ParameterStorageClass.none"></div><span class="def-anchor" id="none"></span><code class="ddoc_psymbol">none</code><br><br><span class="def-anchor" id=".ParameterStorageClass.in_"></span><div class="quickindex" id="quickindex.ParameterStorageClass.in_"></div><span class="def-anchor" id="in_"></span><code class="ddoc_psymbol">in_</code><br><br><span class="def-anchor" id=".ParameterStorageClass.ref_"></span><div class="quickindex" id="quickindex.ParameterStorageClass.ref_"></div><span class="def-anchor" id="ref_"></span><code class="ddoc_psymbol">ref_</code><br><br><span class="def-anchor" id=".ParameterStorageClass.out_"></span><div class="quickindex" id="quickindex.ParameterStorageClass.out_"></div><span class="def-anchor" id="out_"></span><code class="ddoc_psymbol">out_</code><br><br><span class="def-anchor" id=".ParameterStorageClass.lazy_"></span><div class="quickindex" id="quickindex.ParameterStorageClass.lazy_"></div><span class="def-anchor" id="lazy_"></span><code class="ddoc_psymbol">lazy_</code><br><br><span class="def-anchor" id=".ParameterStorageClass.scope_"></span><div class="quickindex" id="quickindex.ParameterStorageClass.scope_"></div><span class="def-anchor" id="scope_"></span><code class="ddoc_psymbol">scope_</code><br><br><span class="def-anchor" id=".ParameterStorageClass.return_"></span><div class="quickindex" id="quickindex.ParameterStorageClass.return_"></div><span class="def-anchor" id="return_"></span><code class="ddoc_psymbol">return_</code><br></div></dt>
  515 <dd><div class="summary">These flags can be bitwise OR-ed together to represent complex storage
  516  class.</div>
  517 </dd>
  518 </dl>
  519 </dd>
  520 <dt class="d_decl"><div ><span class="def-anchor" id=".extractParameterStorageClassFlags"></span><div class="quickindex" id="quickindex.extractParameterStorageClassFlags"></div>enum ParameterStorageClass <span class="def-anchor" id="extractParameterStorageClassFlags"></span><code class="ddoc_psymbol">extractParameterStorageClassFlags</code>(Attribs...);
  521 <br></div></dt>
  522 <dd><div class="summary">Convert the result of <span class="d_inlinecode donthyphenate notranslate">__traits(getParameterStorageClasses)</span>
  523 to <a href="#ParameterStorageClass"><span class="d_inlinecode donthyphenate notranslate">ParameterStorageClass</span></a> <span class="d_inlinecode donthyphenate notranslate">enum</span>s.
  524 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">Attribs</td>
  525 <td class="param_desc">The return value of <span class="d_inlinecode donthyphenate notranslate">__traits(getParameterStorageClasses)</span></td></tr>
  526 </table></div></div>
  527 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">The bitwise OR of the equivalent <a href="#ParameterStorageClass"><span class="d_inlinecode donthyphenate notranslate">ParameterStorageClass</span></a> <span class="d_inlinecode donthyphenate notranslate">enum</span>s.</div></div>
  528 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">void</span> func(<span class="d_keyword">ref</span> <span class="d_keyword">int</span> ctx, <span class="d_keyword">out</span> <span class="d_keyword">real</span> result);
  529 
  530 <span class="d_keyword">enum</span> param1 = <span class="d_psymbol">extractParameterStorageClassFlags</span>!(
  531     <span class="d_keyword">__traits</span>(getParameterStorageClasses, func, 0)
  532 );
  533 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(param1 == ParameterStorageClass.ref_);
  534 
  535 <span class="d_keyword">enum</span> param2 = <span class="d_psymbol">extractParameterStorageClassFlags</span>!(
  536     <span class="d_keyword">__traits</span>(getParameterStorageClasses, func, 1)
  537 );
  538 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(param2 == ParameterStorageClass.out_);
  539 
  540 <span class="d_keyword">enum</span> param3 = <span class="d_psymbol">extractParameterStorageClassFlags</span>!(
  541     <span class="d_keyword">__traits</span>(getParameterStorageClasses, func, 0),
  542     <span class="d_keyword">__traits</span>(getParameterStorageClasses, func, 1)
  543 );
  544 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(param3 == (ParameterStorageClass.ref_ | ParameterStorageClass.out_));
  545 </pre>
  546 </div></div>
  547 
  548 </dd>
  549 <dt class="d_decl"><div ><span class="def-anchor" id=".ParameterIdentifierTuple"></span><div class="quickindex" id="quickindex.ParameterIdentifierTuple"></div>template <span class="def-anchor" id="ParameterIdentifierTuple"></span><code class="ddoc_psymbol">ParameterIdentifierTuple</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  550 <dd><div class="summary">Get, as a tuple, the identifiers of the parameters to a function symbol.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">int</span> foo(<span class="d_keyword">int</span> num, string name, <span class="d_keyword">int</span>);
  551 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>([<span class="d_psymbol">ParameterIdentifierTuple</span>!foo] == [<span class="d_string">"num"</span>, <span class="d_string">"name"</span>, <span class="d_string">""</span>]);
  552 </pre>
  553 </div></div>
  554 
  555 </dd>
  556 <dt class="d_decl"><div ><span class="def-anchor" id=".ParameterDefaults"></span><div class="quickindex" id="quickindex.ParameterDefaults"></div>template <span class="def-anchor" id="ParameterDefaults"></span><code class="ddoc_psymbol">ParameterDefaults</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  557 <dd><div class="summary">Get, as a tuple, the default value of the parameters to a function symbol.
  558 If a parameter doesn't have the default value, <span class="d_inlinecode donthyphenate notranslate">void</span> is returned instead.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">int</span> foo(<span class="d_keyword">int</span> num, string name = <span class="d_string">"hello"</span>, <span class="d_keyword">int</span>[] = [1,2,3], <span class="d_keyword">lazy</span> <span class="d_keyword">int</span> x = 0);
  559 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ParameterDefaults</span>!foo[0] == <span class="d_keyword">void</span>));
  560 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(   <span class="d_psymbol">ParameterDefaults</span>!foo[1] == <span class="d_string">"hello"</span>);
  561 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(   <span class="d_psymbol">ParameterDefaults</span>!foo[2] == [1,2,3]);
  562 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(   <span class="d_psymbol">ParameterDefaults</span>!foo[3] == 0);
  563 </pre>
  564 </div></div>
  565 
  566 </dd>
  567 <dt class="d_decl"><div ><span class="def-anchor" id=".ParameterDefaultValueTuple"></span><div class="quickindex" id="quickindex.ParameterDefaultValueTuple"></div>alias <span class="def-anchor" id="ParameterDefaultValueTuple"></span><code class="ddoc_psymbol">ParameterDefaultValueTuple</code> = ParameterDefaults(func...) if (func.length == 1 &amp;&amp; isCallable!func);
  568 <br></div></dt>
  569 <dd><div class="summary">Alternate name for <a href="#ParameterDefaults"><span class="d_inlinecode donthyphenate notranslate">ParameterDefaults</span></a>, kept for legacy compatibility.</div>
  570 </dd>
  571 <dt class="d_decl"><div ><span class="def-anchor" id=".FunctionAttribute"></span><div class="quickindex" id="quickindex.FunctionAttribute"></div>enum <span class="def-anchor" id="FunctionAttribute"></span><code class="ddoc_psymbol">FunctionAttribute</code>: uint;
  572 <br><br><span class="def-anchor" id=".functionAttributes"></span><div class="quickindex" id="quickindex.functionAttributes"></div>template <span class="def-anchor" id="functionAttributes"></span><code class="ddoc_psymbol">functionAttributes</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  573 <dd><div class="summary">Returns the FunctionAttribute mask for function <span class="d_inlinecode donthyphenate notranslate">func</span>.
  574 </div><div class="keyval SeeAlso"><span class="key keySeeAlso">See Also:</span> <div class="val valSeeAlso"><a href="#hasFunctionAttributes"><span class="d_inlinecode donthyphenate notranslate">hasFunctionAttributes</span></a></div></div>
  575 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">alias</span> FA = <span class="d_psymbol">FunctionAttribute</span>; <span class="d_comment">// shorten the enum name
  576 </span>
  577 <span class="d_keyword">real</span> func(<span class="d_keyword">real</span> x) <span class="d_keyword">pure</span> <span class="d_keyword">nothrow</span> @safe
  578 {
  579     <span class="d_keyword">return</span> x;
  580 }
  581 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">functionAttributes</span>!func &amp; FA.pure_);
  582 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">functionAttributes</span>!func &amp; FA.safe);
  583 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!(<span class="d_psymbol">functionAttributes</span>!func &amp; FA.trusted)); <span class="d_comment">// not @trusted
  584 </span></pre>
  585 </div></div>
  586 
  587 <dl><dt class="d_decl"><div ><span class="def-anchor" id=".FunctionAttribute.none"></span><div class="quickindex" id="quickindex.FunctionAttribute.none"></div><span class="def-anchor" id="none"></span><code class="ddoc_psymbol">none</code><br><br><span class="def-anchor" id=".FunctionAttribute.pure_"></span><div class="quickindex" id="quickindex.FunctionAttribute.pure_"></div><span class="def-anchor" id="pure_"></span><code class="ddoc_psymbol">pure_</code><br><br><span class="def-anchor" id=".FunctionAttribute.nothrow_"></span><div class="quickindex" id="quickindex.FunctionAttribute.nothrow_"></div><span class="def-anchor" id="nothrow_"></span><code class="ddoc_psymbol">nothrow_</code><br><br><span class="def-anchor" id=".FunctionAttribute.ref_"></span><div class="quickindex" id="quickindex.FunctionAttribute.ref_"></div><span class="def-anchor" id="ref_"></span><code class="ddoc_psymbol">ref_</code><br><br><span class="def-anchor" id=".FunctionAttribute.property"></span><div class="quickindex" id="quickindex.FunctionAttribute.property"></div><span class="def-anchor" id="property"></span><code class="ddoc_psymbol">property</code><br><br><span class="def-anchor" id=".FunctionAttribute.trusted"></span><div class="quickindex" id="quickindex.FunctionAttribute.trusted"></div><span class="def-anchor" id="trusted"></span><code class="ddoc_psymbol">trusted</code><br><br><span class="def-anchor" id=".FunctionAttribute.safe"></span><div class="quickindex" id="quickindex.FunctionAttribute.safe"></div><span class="def-anchor" id="safe"></span><code class="ddoc_psymbol">safe</code><br><br><span class="def-anchor" id=".FunctionAttribute.nogc"></span><div class="quickindex" id="quickindex.FunctionAttribute.nogc"></div><span class="def-anchor" id="nogc"></span><code class="ddoc_psymbol">nogc</code><br><br><span class="def-anchor" id=".FunctionAttribute.system"></span><div class="quickindex" id="quickindex.FunctionAttribute.system"></div><span class="def-anchor" id="system"></span><code class="ddoc_psymbol">system</code><br><br><span class="def-anchor" id=".FunctionAttribute.const_"></span><div class="quickindex" id="quickindex.FunctionAttribute.const_"></div><span class="def-anchor" id="const_"></span><code class="ddoc_psymbol">const_</code><br><br><span class="def-anchor" id=".FunctionAttribute.immutable_"></span><div class="quickindex" id="quickindex.FunctionAttribute.immutable_"></div><span class="def-anchor" id="immutable_"></span><code class="ddoc_psymbol">immutable_</code><br><br><span class="def-anchor" id=".FunctionAttribute.inout_"></span><div class="quickindex" id="quickindex.FunctionAttribute.inout_"></div><span class="def-anchor" id="inout_"></span><code class="ddoc_psymbol">inout_</code><br><br><span class="def-anchor" id=".FunctionAttribute.shared_"></span><div class="quickindex" id="quickindex.FunctionAttribute.shared_"></div><span class="def-anchor" id="shared_"></span><code class="ddoc_psymbol">shared_</code><br><br><span class="def-anchor" id=".FunctionAttribute.return_"></span><div class="quickindex" id="quickindex.FunctionAttribute.return_"></div><span class="def-anchor" id="return_"></span><code class="ddoc_psymbol">return_</code><br><br><span class="def-anchor" id=".FunctionAttribute.scope_"></span><div class="quickindex" id="quickindex.FunctionAttribute.scope_"></div><span class="def-anchor" id="scope_"></span><code class="ddoc_psymbol">scope_</code><br><br><span class="def-anchor" id=".FunctionAttribute.live"></span><div class="quickindex" id="quickindex.FunctionAttribute.live"></div><span class="def-anchor" id="live"></span><code class="ddoc_psymbol">live</code><br></div></dt>
  588 <dd><div class="summary">These flags can be bitwise OR-ed together to represent a complex attribute.</div>
  589 </dd>
  590 </dl>
  591 </dd>
  592 <dt class="d_decl"><div ><span class="def-anchor" id=".hasFunctionAttributes"></span><div class="quickindex" id="quickindex.hasFunctionAttributes"></div>template <span class="def-anchor" id="hasFunctionAttributes"></span><code class="ddoc_psymbol">hasFunctionAttributes</code>(args...) if (args.length &gt; 0 &amp;&amp; isCallable!(args[0]) &amp;&amp; allSatisfy!(isSomeString, typeof(args[1..$])))<br></div></dt>
  593 <dd><div class="summary">Checks whether a function has the given attributes attached.
  594 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">args</td>
  595 <td class="param_desc">Function to check, followed by a
  596     variadic number of function attributes as strings</td></tr>
  597 </table></div></div>
  598 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">true</span>, if the function has the list of attributes attached and <span class="d_inlinecode donthyphenate notranslate">false</span> otherwise.
  599 
  600 </div></div>
  601 <div class="keyval SeeAlso"><span class="key keySeeAlso">See Also:</span> <div class="val valSeeAlso"><a href="#functionAttributes"><span class="d_inlinecode donthyphenate notranslate">functionAttributes</span></a></div></div>
  602 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">real</span> func(<span class="d_keyword">real</span> x) <span class="d_keyword">pure</span> <span class="d_keyword">nothrow</span> @safe;
  603 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasFunctionAttributes</span>!(func, <span class="d_string">"@safe"</span>, <span class="d_string">"pure"</span>));
  604 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasFunctionAttributes</span>!(func, <span class="d_string">"@trusted"</span>));
  605 
  606 <span class="d_comment">// for templates attributes are automatically inferred
  607 </span><span class="d_keyword">bool</span> myFunc(T)(T b)
  608 {
  609     <span class="d_keyword">return</span> !b;
  610 }
  611 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasFunctionAttributes</span>!(myFunc!<span class="d_keyword">bool</span>, <span class="d_string">"@safe"</span>, <span class="d_string">"pure"</span>, <span class="d_string">"@nogc"</span>, <span class="d_string">"nothrow"</span>));
  612 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasFunctionAttributes</span>!(myFunc!<span class="d_keyword">bool</span>, <span class="d_string">"shared"</span>));
  613 </pre>
  614 </div></div>
  615 
  616 </dd>
  617 <dt class="d_decl"><div ><span class="def-anchor" id=".isSafe"></span><div class="quickindex" id="quickindex.isSafe"></div>template <span class="def-anchor" id="isSafe"></span><code class="ddoc_psymbol">isSafe</code>(alias func) if (isCallable!func)<br></div></dt>
  618 <dd><div class="summary"><span class="d_inlinecode donthyphenate notranslate">true</span> if <span class="d_inlinecode donthyphenate notranslate">func</span> is <span class="d_inlinecode donthyphenate notranslate">@safe</span> or <span class="d_inlinecode donthyphenate notranslate">@trusted</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate">@safe    <span class="d_keyword">int</span> add(<span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b) {<span class="d_keyword">return</span> a+b;}
  619 @trusted <span class="d_keyword">int</span> sub(<span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b) {<span class="d_keyword">return</span> a-b;}
  620 @system  <span class="d_keyword">int</span> mul(<span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b) {<span class="d_keyword">return</span> a*b;}
  621 
  622 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isSafe</span>!add);
  623 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isSafe</span>!sub);
  624 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isSafe</span>!mul);
  625 </pre>
  626 </div></div>
  627 
  628 </dd>
  629 <dt class="d_decl"><div ><span class="def-anchor" id=".isUnsafe"></span><div class="quickindex" id="quickindex.isUnsafe"></div>enum auto <span class="def-anchor" id="isUnsafe"></span><code class="ddoc_psymbol">isUnsafe</code>(alias func);
  630 <br></div></dt>
  631 <dd><div class="summary"><span class="d_inlinecode donthyphenate notranslate">true</span> if <span class="d_inlinecode donthyphenate notranslate">func</span> is <span class="d_inlinecode donthyphenate notranslate">@system</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate">@safe    <span class="d_keyword">int</span> add(<span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b) {<span class="d_keyword">return</span> a+b;}
  632 @trusted <span class="d_keyword">int</span> sub(<span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b) {<span class="d_keyword">return</span> a-b;}
  633 @system  <span class="d_keyword">int</span> mul(<span class="d_keyword">int</span> a, <span class="d_keyword">int</span> b) {<span class="d_keyword">return</span> a*b;}
  634 
  635 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isUnsafe</span>!add);
  636 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isUnsafe</span>!sub);
  637 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isUnsafe</span>!mul);
  638 </pre>
  639 </div></div>
  640 
  641 </dd>
  642 <dt class="d_decl"><div ><span class="def-anchor" id=".functionLinkage"></span><div class="quickindex" id="quickindex.functionLinkage"></div>template <span class="def-anchor" id="functionLinkage"></span><code class="ddoc_psymbol">functionLinkage</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  643 <dd><div class="summary">Determine the linkage attribute of the function.
  644 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">func</td>
  645 <td class="param_desc">the function symbol, or the type of a function, delegate, or pointer to function</td></tr>
  646 </table></div></div>
  647 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">one of the strings "D", "C", "C++", "Windows", "Objective-C", or "System".</div></div>
  648 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">extern</span>(D) <span class="d_keyword">void</span> Dfunc() {}
  649 <span class="d_keyword">extern</span>(C) <span class="d_keyword">void</span> Cfunc() {}
  650 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">functionLinkage</span>!Dfunc == <span class="d_string">"D"</span>);
  651 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">functionLinkage</span>!Cfunc == <span class="d_string">"C"</span>);
  652 
  653 string a = <span class="d_psymbol">functionLinkage</span>!Dfunc;
  654 writeln(a); <span class="d_comment">// "D"
  655 </span>
  656 <span class="d_keyword">auto</span> fp = &amp;Cfunc;
  657 string b = <span class="d_psymbol">functionLinkage</span>!fp;
  658 writeln(b); <span class="d_comment">// "C"
  659 </span></pre>
  660 </div></div>
  661 
  662 </dd>
  663 <dt class="d_decl"><div ><span class="def-anchor" id=".Variadic"></span><div class="quickindex" id="quickindex.Variadic"></div>enum <span class="def-anchor" id="Variadic"></span><code class="ddoc_psymbol">Variadic</code>: int;
  664 <br><br><span class="def-anchor" id=".variadicFunctionStyle"></span><div class="quickindex" id="quickindex.variadicFunctionStyle"></div>template <span class="def-anchor" id="variadicFunctionStyle"></span><code class="ddoc_psymbol">variadicFunctionStyle</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  665 <dd><div class="summary">Determines what kind of variadic parameters function has.
  666 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">func</td>
  667 <td class="param_desc">function symbol or type of function, delegate, or pointer to function</td></tr>
  668 </table></div></div>
  669 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">enum Variadic</div></div>
  670 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">void</span> func() {}
  671 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">variadicFunctionStyle</span>!func == <span class="d_psymbol">Variadic</span>.no);
  672 
  673 <span class="d_keyword">extern</span>(C) <span class="d_keyword">int</span> printf(<span class="d_keyword">in</span> <span class="d_keyword">char</span>*, ...);
  674 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">variadicFunctionStyle</span>!printf == <span class="d_psymbol">Variadic</span>.c);
  675 </pre>
  676 </div></div>
  677 
  678 <dl><dt class="d_decl"><div ><span class="def-anchor" id=".Variadic.no"></span><div class="quickindex" id="quickindex.Variadic.no"></div><span class="def-anchor" id="no"></span><code class="ddoc_psymbol">no</code><br></div></dt>
  679 <dd><div class="summary">Function is not variadic.</div>
  680 </dd>
  681 <dt class="d_decl"><div ><span class="def-anchor" id=".Variadic.c"></span><div class="quickindex" id="quickindex.Variadic.c"></div><span class="def-anchor" id="c"></span><code class="ddoc_psymbol">c</code><br></div></dt>
  682 <dd><div class="summary">Function is a C-style variadic function, which uses
  683 <span class="d_inlinecode donthyphenate notranslate">core.stdc.stdarg</span></div>
  684 </dd>
  685 <dt class="d_decl"><div ><span class="def-anchor" id=".Variadic.d"></span><div class="quickindex" id="quickindex.Variadic.d"></div><span class="def-anchor" id="d"></span><code class="ddoc_psymbol">d</code><br></div></dt>
  686 <dd><div class="summary">Function is a D-style variadic function, which uses
  687 <span class="d_inlinecode donthyphenate notranslate">__argptr</span> and <span class="d_inlinecode donthyphenate notranslate">__arguments</span>.</div>
  688 </dd>
  689 <dt class="d_decl"><div ><span class="def-anchor" id=".Variadic.typesafe"></span><div class="quickindex" id="quickindex.Variadic.typesafe"></div><span class="def-anchor" id="typesafe"></span><code class="ddoc_psymbol">typesafe</code><br></div></dt>
  690 <dd><div class="summary">Function is a typesafe variadic function.</div>
  691 </dd>
  692 </dl>
  693 </dd>
  694 <dt class="d_decl"><div ><span class="def-anchor" id=".FunctionTypeOf"></span><div class="quickindex" id="quickindex.FunctionTypeOf"></div>template <span class="def-anchor" id="FunctionTypeOf"></span><code class="ddoc_psymbol">FunctionTypeOf</code>(func...) if (func.length == 1 &amp;&amp; isCallable!func)<br></div></dt>
  695 <dd><div class="summary">Get the function type from a callable object <span class="d_inlinecode donthyphenate notranslate">func</span>.
  696 </div><div class="description">Using builtin <span class="d_inlinecode donthyphenate notranslate">typeof</span> on a property function yields the types of the
  697 property value, not of the property function itself.  Still,
  698 <span class="d_inlinecode donthyphenate notranslate"><span class="def-anchor" id="FunctionTypeOf"></span><code class="ddoc_psymbol">FunctionTypeOf</code></span> is able to obtain function types of properties.
  699 
  700 </div>
  701 <div class="val"><p class="keyval Section"><span class="key keySection">Note</span>
  702 Do not confuse function types with function pointer types; function types are
  703 usually used for compile-time reflection purposes.</p></div>
  704 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">class</span> C
  705 {
  706     <span class="d_keyword">int</span> value() @property { <span class="d_keyword">return</span> 0; }
  707 }
  708 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>( <span class="d_keyword">typeof</span>(C.value) == <span class="d_keyword">int</span> ));
  709 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>( <span class="d_psymbol">FunctionTypeOf</span>!(C.value) == <span class="d_keyword">function</span> ));
  710 </pre>
  711 </div></div>
  712 
  713 </dd>
  714 <dt class="d_decl"><div ><span class="def-anchor" id=".SetFunctionAttributes"></span><div class="quickindex" id="quickindex.SetFunctionAttributes"></div>template <span class="def-anchor" id="SetFunctionAttributes"></span><code class="ddoc_psymbol">SetFunctionAttributes</code>(T, string linkage, uint attrs) if (isFunctionPointer!T || isDelegate!T)<br><br>template <span class="def-anchor" id="SetFunctionAttributes"></span><code class="ddoc_psymbol">SetFunctionAttributes</code>(T, string linkage, uint attrs) if (is(T == function))<br></div></dt>
  715 <dd><div class="summary">Constructs a new function or delegate type with the same basic signature
  716  as the given one, but different attributes (including linkage).
  717 </div><div class="description">This is especially useful for adding/removing attributes to/from types in
  718  generic code, where the actual type name cannot be spelt out.
  719 
  720 </div>
  721 <div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  722 <td class="param_desc">The base type.</td></tr>
  723 <tr class="param"><td class="param_id">linkage</td>
  724 <td class="param_desc">The desired linkage of the result type.</td></tr>
  725 <tr class="param"><td class="param_id">attrs</td>
  726 <td class="param_desc">The desired <a href="#FunctionAttribute"><span class="d_inlinecode donthyphenate notranslate">FunctionAttribute</span></a>s of the result type.</td></tr>
  727 </table></div></div>
  728 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">alias</span> ExternC(T) = <span class="d_psymbol">SetFunctionAttributes</span>!(T, <span class="d_string">"C"</span>, functionAttributes!T);
  729 
  730 <span class="d_keyword">auto</span> assumePure(T)(T t)
  731 <span class="d_keyword">if</span> (isFunctionPointer!T || isDelegate!T)
  732 {
  733     <span class="d_keyword">enum</span> attrs = functionAttributes!T | FunctionAttribute.pure_;
  734     <span class="d_keyword">return</span> <span class="d_keyword">cast</span>(<span class="d_psymbol">SetFunctionAttributes</span>!(T, functionLinkage!T, attrs)) t;
  735 }
  736 
  737 <span class="d_keyword">int</span> f()
  738 {
  739     <span class="d_keyword">import</span> core.thread : getpid;
  740     <span class="d_keyword">return</span> getpid();
  741 }
  742 
  743 <span class="d_keyword">int</span> g() <span class="d_keyword">pure</span> @trusted
  744 {
  745     <span class="d_keyword">auto</span> pureF = assumePure(&amp;f);
  746     <span class="d_keyword">return</span> pureF();
  747 }
  748 <span class="d_keyword">assert</span>(g() &gt; 0);
  749 </pre>
  750 </div></div>
  751 
  752 </dd>
  753 <dt class="d_decl"><div ><span class="def-anchor" id=".isInnerClass"></span><div class="quickindex" id="quickindex.isInnerClass"></div>template <span class="def-anchor" id="isInnerClass"></span><code class="ddoc_psymbol">isInnerClass</code>(T) if (is(T == class))<br></div></dt>
  754 <dd><div class="summary">Determines whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a class nested inside another class
  755 and that <span class="d_inlinecode donthyphenate notranslate">T.outer</span> is the implicit reference to the outer class
  756 (i.e. <span class="d_inlinecode donthyphenate notranslate">outer</span> has not been used as a field or method name)
  757 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
  758 <td class="param_desc">type to test</td></tr>
  759 </table></div></div>
  760 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">true</span> if <span class="d_inlinecode donthyphenate notranslate">T</span> is a class nested inside another, with the conditions described above;
  761 <span class="d_inlinecode donthyphenate notranslate">false</span> otherwise</div></div>
  762 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">class</span> C
  763 {
  764     <span class="d_keyword">int</span> outer;
  765 }
  766 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isInnerClass</span>!C);
  767 
  768 <span class="d_keyword">class</span> Outer1
  769 {
  770     <span class="d_keyword">class</span> Inner1 { }
  771     <span class="d_keyword">class</span> Inner2
  772     {
  773         <span class="d_keyword">int</span> outer;
  774     }
  775 }
  776 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isInnerClass</span>!(Outer1.Inner1));
  777 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isInnerClass</span>!(Outer1.Inner2));
  778 
  779 <span class="d_keyword">static</span> <span class="d_keyword">class</span> Outer2
  780 {
  781     <span class="d_keyword">static</span> <span class="d_keyword">class</span> Inner
  782     {
  783         <span class="d_keyword">int</span> outer;
  784     }
  785 }
  786 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isInnerClass</span>!(Outer2.Inner));
  787 </pre>
  788 </div></div>
  789 
  790 </dd>
  791 <dt class="d_decl"><div ><span class="def-anchor" id=".isNested"></span><div class="quickindex" id="quickindex.isNested"></div>template <span class="def-anchor" id="isNested"></span><code class="ddoc_psymbol">isNested</code>(T) if (is(T == class) || is(T == struct) || is(T == union))<br></div></dt>
  792 <dd><div class="summary">Determines whether <span class="d_inlinecode donthyphenate notranslate">T</span> has its own context pointer.
  793 <span class="d_inlinecode donthyphenate notranslate">T</span> must be either <span class="d_inlinecode donthyphenate notranslate">class</span>, <span class="d_inlinecode donthyphenate notranslate">struct</span>, or <span class="d_inlinecode donthyphenate notranslate">union</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">struct</span> S { }
  794 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isNested</span>!S);
  795 
  796 <span class="d_keyword">int</span> i;
  797 <span class="d_keyword">struct</span> NestedStruct { <span class="d_keyword">void</span> f() { ++i; } }
  798 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isNested</span>!NestedStruct);
  799 </pre>
  800 </div></div>
  801 
  802 </dd>
  803 <dt class="d_decl"><div ><span class="def-anchor" id=".hasNested"></span><div class="quickindex" id="quickindex.hasNested"></div>template <span class="def-anchor" id="hasNested"></span><code class="ddoc_psymbol">hasNested</code>(T)<br></div></dt>
  804 <dd><div class="summary">Determines whether <span class="d_inlinecode donthyphenate notranslate">T</span> or any of its representation types
  805 have a context pointer.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">struct</span> S { }
  806 
  807 <span class="d_keyword">int</span> i;
  808 <span class="d_keyword">struct</span> NS { <span class="d_keyword">void</span> f() { ++i; } }
  809 
  810 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasNested</span>!(S[2]));
  811 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasNested</span>!(NS[2]));
  812 </pre>
  813 </div></div>
  814 
  815 </dd>
  816 <dt class="d_decl"><div ><span class="def-anchor" id=".Fields"></span><div class="quickindex" id="quickindex.Fields"></div>template <span class="def-anchor" id="Fields"></span><code class="ddoc_psymbol">Fields</code>(T)<br></div></dt>
  817 <dd><div class="summary">Get as a tuple the types of the fields of a struct, class, or union.
  818  This consists of the fields that take up memory space,
  819  excluding the hidden fields like the virtual function
  820  table pointer or a context pointer for nested types.
  821  If <span class="d_inlinecode donthyphenate notranslate">T</span> isn't a struct, class, or union returns a tuple
  822  with one element <span class="d_inlinecode donthyphenate notranslate">T</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">import</span> std.meta : AliasSeq;
  823 <span class="d_keyword">struct</span> S { <span class="d_keyword">int</span> x; <span class="d_keyword">float</span> y; }
  824 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">Fields</span>!S == AliasSeq!(<span class="d_keyword">int</span>, <span class="d_keyword">float</span>)));
  825 </pre>
  826 </div></div>
  827 
  828 </dd>
  829 <dt class="d_decl"><div ><span class="def-anchor" id=".FieldTypeTuple"></span><div class="quickindex" id="quickindex.FieldTypeTuple"></div>alias <span class="def-anchor" id="FieldTypeTuple"></span><code class="ddoc_psymbol">FieldTypeTuple</code> = Fields(T);
  830 <br></div></dt>
  831 <dd><div class="summary">Alternate name for <a href="#Fields"><span class="d_inlinecode donthyphenate notranslate">Fields</span></a>, kept for legacy compatibility.</div>
  832 </dd>
  833 <dt class="d_decl"><div ><span class="def-anchor" id=".FieldNameTuple"></span><div class="quickindex" id="quickindex.FieldNameTuple"></div>template <span class="def-anchor" id="FieldNameTuple"></span><code class="ddoc_psymbol">FieldNameTuple</code>(T)<br></div></dt>
  834 <dd><div class="summary">Get as an expression tuple the names of the fields of a struct, class, or
  835  union. This consists of the fields that take up memory space, excluding the
  836  hidden fields like the virtual function table pointer or a context pointer
  837  for nested types.
  838  Inherited fields (for classes) are not included.
  839  If <span class="d_inlinecode donthyphenate notranslate">T</span> isn't a struct, class, or union, an
  840  expression tuple with an empty string is returned.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">import</span> std.meta : AliasSeq;
  841 <span class="d_keyword">struct</span> S { <span class="d_keyword">int</span> x; <span class="d_keyword">float</span> y; }
  842 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">FieldNameTuple</span>!S == AliasSeq!(<span class="d_string">"x"</span>, <span class="d_string">"y"</span>));
  843 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">FieldNameTuple</span>!<span class="d_keyword">int</span> == AliasSeq!<span class="d_string">""</span>);
  844 </pre>
  845 </div></div>
  846 
  847 </dd>
  848 <dt class="d_decl"><div ><span class="def-anchor" id=".RepresentationTypeTuple"></span><div class="quickindex" id="quickindex.RepresentationTypeTuple"></div>template <span class="def-anchor" id="RepresentationTypeTuple"></span><code class="ddoc_psymbol">RepresentationTypeTuple</code>(T)<br></div></dt>
  849 <dd><div class="summary">Get the primitive types of the fields of a struct or class, in
  850 topological order.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">struct</span> S1 { <span class="d_keyword">int</span> a; <span class="d_keyword">float</span> b; }
  851 <span class="d_keyword">struct</span> S2 { <span class="d_keyword">char</span>[] a; <span class="d_keyword">union</span> { S1 b; S1 * c; } }
  852 <span class="d_keyword">alias</span> R = <span class="d_psymbol">RepresentationTypeTuple</span>!S2;
  853 <span class="d_keyword">assert</span>(R.length == 4
  854     &amp;&amp; <span class="d_keyword">is</span>(R[0] == <span class="d_keyword">char</span>[]) &amp;&amp; <span class="d_keyword">is</span>(R[1] == <span class="d_keyword">int</span>)
  855     &amp;&amp; <span class="d_keyword">is</span>(R[2] == <span class="d_keyword">float</span>) &amp;&amp; <span class="d_keyword">is</span>(R[3] == S1*));
  856 </pre>
  857 </div></div>
  858 
  859 </dd>
  860 <dt class="d_decl"><div ><span class="def-anchor" id=".hasAliasing"></span><div class="quickindex" id="quickindex.hasAliasing"></div>enum auto <span class="def-anchor" id="hasAliasing"></span><code class="ddoc_psymbol">hasAliasing</code>(T...);
  861 <br></div></dt>
  862 <dd><div class="summary">Returns <span class="d_inlinecode donthyphenate notranslate">true</span> if and only if <span class="d_inlinecode donthyphenate notranslate">T</span>'s representation includes at
  863 least one of the following: <ol><li>a raw pointer <span class="d_inlinecode donthyphenate notranslate">U*</span> and <span class="d_inlinecode donthyphenate notranslate">U</span>
  864 is not immutable;</li> <li>an array <span class="d_inlinecode donthyphenate notranslate">U[]</span> and <span class="d_inlinecode donthyphenate notranslate">U</span> is not
  865 immutable;</li> <li>a reference to a class or interface type <span class="d_inlinecode donthyphenate notranslate">C</span> and <span class="d_inlinecode donthyphenate notranslate">C</span> is
  866 not immutable.</li> <li>an associative array that is not immutable.</li>
  867 <li>a delegate.</li></ol></div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">struct</span> S1 { <span class="d_keyword">int</span> a; Object b; }
  868 <span class="d_keyword">struct</span> S2 { string a; }
  869 <span class="d_keyword">struct</span> S3 { <span class="d_keyword">int</span> a; <span class="d_keyword">immutable</span> Object b; }
  870 <span class="d_keyword">struct</span> S4 { <span class="d_keyword">float</span>[3] vals; }
  871 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasAliasing</span>!S1);
  872 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasAliasing</span>!S2);
  873 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasAliasing</span>!S3);
  874 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasAliasing</span>!S4);
  875 </pre>
  876 </div></div>
  877 
  878 </dd>
  879 <dt class="d_decl"><div ><span class="def-anchor" id=".hasIndirections"></span><div class="quickindex" id="quickindex.hasIndirections"></div>template <span class="def-anchor" id="hasIndirections"></span><code class="ddoc_psymbol">hasIndirections</code>(T)<br></div></dt>
  880 <dd><div class="summary">Returns <span class="d_inlinecode donthyphenate notranslate">true</span> if and only if <span class="d_inlinecode donthyphenate notranslate">T</span>'s representation includes at
  881 least one of the following: <ol><li>a raw pointer <span class="d_inlinecode donthyphenate notranslate">U*</span>;</li> <li>an
  882 array <span class="d_inlinecode donthyphenate notranslate">U[]</span>;</li> <li>a reference to a class type <span class="d_inlinecode donthyphenate notranslate">C</span>.</li>
  883 <li>an associative array.</li> <li>a delegate.</li></ol></div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">int</span>[string]));
  884 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">void</span> <span class="d_keyword">delegate</span>()));
  885 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">void</span> <span class="d_keyword">delegate</span>() <span class="d_keyword">immutable</span>));
  886 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">void</span> <span class="d_keyword">delegate</span>())));
  887 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">void</span> <span class="d_keyword">delegate</span>() <span class="d_keyword">immutable</span>)));
  888 
  889 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">void</span> <span class="d_keyword">function</span>()));
  890 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">void</span>*[1]));
  891 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasIndirections</span>!(<span class="d_keyword">byte</span>[1]));
  892 </pre>
  893 </div></div>
  894 
  895 </dd>
  896 <dt class="d_decl"><div ><span class="def-anchor" id=".hasUnsharedAliasing"></span><div class="quickindex" id="quickindex.hasUnsharedAliasing"></div>enum auto <span class="def-anchor" id="hasUnsharedAliasing"></span><code class="ddoc_psymbol">hasUnsharedAliasing</code>(T...);
  897 <br></div></dt>
  898 <dd><div class="summary">Returns <span class="d_inlinecode donthyphenate notranslate">true</span> if and only if <span class="d_inlinecode donthyphenate notranslate">T</span>'s representation includes at
  899 least one of the following: <ol><li>a raw pointer <span class="d_inlinecode donthyphenate notranslate">U*</span> and <span class="d_inlinecode donthyphenate notranslate">U</span>
  900 is not immutable or shared;</li> <li>an array <span class="d_inlinecode donthyphenate notranslate">U[]</span> and <span class="d_inlinecode donthyphenate notranslate">U</span> is not
  901 immutable or shared;</li> <li>a reference to a class type <span class="d_inlinecode donthyphenate notranslate">C</span> and
  902 <span class="d_inlinecode donthyphenate notranslate">C</span> is not immutable or shared.</li> <li>an associative array that is not
  903 immutable or shared.</li> <li>a delegate that is not shared.</li></ol></div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">struct</span> S1 { <span class="d_keyword">int</span> a; Object b; }
  904 <span class="d_keyword">struct</span> S2 { string a; }
  905 <span class="d_keyword">struct</span> S3 { <span class="d_keyword">int</span> a; <span class="d_keyword">immutable</span> Object b; }
  906 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasUnsharedAliasing</span>!S1);
  907 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasUnsharedAliasing</span>!S2);
  908 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasUnsharedAliasing</span>!S3);
  909 
  910 <span class="d_keyword">struct</span> S4 { <span class="d_keyword">int</span> a; <span class="d_keyword">shared</span> Object b; }
  911 <span class="d_keyword">struct</span> S5 { <span class="d_keyword">char</span>[] a; }
  912 <span class="d_keyword">struct</span> S6 { <span class="d_keyword">shared</span> <span class="d_keyword">char</span>[] b; }
  913 <span class="d_keyword">struct</span> S7 { <span class="d_keyword">float</span>[3] vals; }
  914 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasUnsharedAliasing</span>!S4);
  915 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasUnsharedAliasing</span>!S5);
  916 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasUnsharedAliasing</span>!S6);
  917 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasUnsharedAliasing</span>!S7);
  918 </pre>
  919 </div></div>
  920 
  921 </dd>
  922 <dt class="d_decl"><div ><span class="def-anchor" id=".hasElaborateCopyConstructor"></span><div class="quickindex" id="quickindex.hasElaborateCopyConstructor"></div>template <span class="def-anchor" id="hasElaborateCopyConstructor"></span><code class="ddoc_psymbol">hasElaborateCopyConstructor</code>(S)<br></div></dt>
  923 <dd><div class="summary">True if <span class="d_inlinecode donthyphenate notranslate">S</span> or any type embedded directly in the representation of <span class="d_inlinecode donthyphenate notranslate">S</span>
  924  defines an elaborate copy constructor. Elaborate copy constructors are
  925  introduced by defining <span class="d_inlinecode donthyphenate notranslate">this(this)</span> for a <span class="d_inlinecode donthyphenate notranslate">struct</span>.
  926 </div><div class="description">Classes and unions never have elaborate copy constructors.</div>
  927 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateCopyConstructor</span>!<span class="d_keyword">int</span>);
  928 
  929 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S1 { }
  930 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S2 { <span class="d_keyword">this</span>(<span class="d_keyword">this</span>) {} }
  931 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S3 { S2 field; }
  932 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S4 { S3[1] field; }
  933 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S5 { S3[] field; }
  934 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S6 { S3[0] field; }
  935 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S7 { @disable <span class="d_keyword">this</span>(); S3 field; }
  936 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateCopyConstructor</span>!S1);
  937 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateCopyConstructor</span>!S2);
  938 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateCopyConstructor</span>!(<span class="d_keyword">immutable</span> S2));
  939 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateCopyConstructor</span>!S3);
  940 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateCopyConstructor</span>!(S3[1]));
  941 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateCopyConstructor</span>!(S3[0]));
  942 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateCopyConstructor</span>!S4);
  943 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateCopyConstructor</span>!S5);
  944 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateCopyConstructor</span>!S6);
  945 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateCopyConstructor</span>!S7);
  946 </pre>
  947 </div></div>
  948 
  949 </dd>
  950 <dt class="d_decl"><div ><span class="def-anchor" id=".hasElaborateAssign"></span><div class="quickindex" id="quickindex.hasElaborateAssign"></div>template <span class="def-anchor" id="hasElaborateAssign"></span><code class="ddoc_psymbol">hasElaborateAssign</code>(S)<br></div></dt>
  951 <dd><div class="summary">True if <span class="d_inlinecode donthyphenate notranslate">S</span> or any type directly embedded in the representation of <span class="d_inlinecode donthyphenate notranslate">S</span>
  952    defines an elaborate assignment. Elaborate assignments are introduced by
  953    defining <span class="d_inlinecode donthyphenate notranslate">opAssign(typeof(this))</span> or <span class="d_inlinecode donthyphenate notranslate">opAssign(ref typeof(this))</span>
  954    for a <span class="d_inlinecode donthyphenate notranslate">struct</span> or when there is a compiler-generated <span class="d_inlinecode donthyphenate notranslate">opAssign</span>.
  955 </div><div class="description">A type <span class="d_inlinecode donthyphenate notranslate">S</span> gets compiler-generated <span class="d_inlinecode donthyphenate notranslate">opAssign</span> if it has
  956    an elaborate destructor.
  957 <div class="blankline"></div>
  958 
  959    Classes and unions never have elaborate assignments.
  960 
  961 </div>
  962 <div class="val"><p class="keyval Section"><span class="key keySection">Note</span>
  963 Structs with (possibly nested) postblit operator(s) will have a
  964    hidden yet elaborate compiler generated assignment operator (unless
  965    explicitly disabled).</p></div>
  966 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateAssign</span>!<span class="d_keyword">int</span>);
  967 
  968 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S  { <span class="d_keyword">void</span> opAssign(S) {} }
  969 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateAssign</span>!S);
  970 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateAssign</span>!(<span class="d_keyword">const</span>(S)));
  971 
  972 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S1 { <span class="d_keyword">void</span> opAssign(<span class="d_keyword">ref</span> S1) {} }
  973 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S2 { <span class="d_keyword">void</span> opAssign(<span class="d_keyword">int</span>) {} }
  974 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S3 { S s; }
  975 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateAssign</span>!S1);
  976 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateAssign</span>!S2);
  977 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateAssign</span>!S3);
  978 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateAssign</span>!(S3[1]));
  979 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateAssign</span>!(S3[0]));
  980 </pre>
  981 </div></div>
  982 
  983 </dd>
  984 <dt class="d_decl"><div ><span class="def-anchor" id=".hasElaborateDestructor"></span><div class="quickindex" id="quickindex.hasElaborateDestructor"></div>template <span class="def-anchor" id="hasElaborateDestructor"></span><code class="ddoc_psymbol">hasElaborateDestructor</code>(S)<br></div></dt>
  985 <dd><div class="summary">True if <span class="d_inlinecode donthyphenate notranslate">S</span> or any type directly embedded in the representation
  986    of <span class="d_inlinecode donthyphenate notranslate">S</span> defines an elaborate destructor. Elaborate destructors
  987    are introduced by defining <span class="d_inlinecode donthyphenate notranslate">~this()</span> for a <span class="d_inlinecode donthyphenate notranslate">   struct</span>.
  988 </div><div class="description">Classes and unions never have elaborate destructors, even
  989    though classes may define <span class="d_inlinecode donthyphenate notranslate">~this()</span>.</div>
  990 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateDestructor</span>!<span class="d_keyword">int</span>);
  991 
  992 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S1 { }
  993 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S2 { ~<span class="d_keyword">this</span>() {} }
  994 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S3 { S2 field; }
  995 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S4 { S3[1] field; }
  996 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S5 { S3[] field; }
  997 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S6 { S3[0] field; }
  998 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S7 { @disable <span class="d_keyword">this</span>(); S3 field; }
  999 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateDestructor</span>!S1);
 1000 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateDestructor</span>!S2);
 1001 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateDestructor</span>!(<span class="d_keyword">immutable</span> S2));
 1002 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateDestructor</span>!S3);
 1003 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateDestructor</span>!(S3[1]));
 1004 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateDestructor</span>!(S3[0]));
 1005 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateDestructor</span>!S4);
 1006 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateDestructor</span>!S5);
 1007 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateDestructor</span>!S6);
 1008 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateDestructor</span>!S7);
 1009 </pre>
 1010 </div></div>
 1011 
 1012 </dd>
 1013 <dt class="d_decl"><div ><span class="def-anchor" id=".hasElaborateMove"></span><div class="quickindex" id="quickindex.hasElaborateMove"></div>template <span class="def-anchor" id="hasElaborateMove"></span><code class="ddoc_psymbol">hasElaborateMove</code>(S)<br></div></dt>
 1014 <dd><div class="summary">True if <span class="d_inlinecode donthyphenate notranslate">S</span> or any type embedded directly in the representation of <span class="d_inlinecode donthyphenate notranslate">S</span>
 1015  defines elaborate move semantics. Elaborate move semantics are
 1016  introduced by defining <span class="d_inlinecode donthyphenate notranslate">opPostMove(ref typeof(this))</span> for a <span class="d_inlinecode donthyphenate notranslate">struct</span>.
 1017 </div><div class="description">Classes and unions never have elaborate move semantics.</div>
 1018 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateMove</span>!<span class="d_keyword">int</span>);
 1019 
 1020 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S1 { }
 1021 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S2 { <span class="d_keyword">void</span> opPostMove(<span class="d_keyword">ref</span> S2) {} }
 1022 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S3 { <span class="d_keyword">void</span> opPostMove(<span class="d_keyword">inout</span> <span class="d_keyword">ref</span> S3) <span class="d_keyword">inout</span> {} }
 1023 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S4 { <span class="d_keyword">void</span> opPostMove(<span class="d_keyword">const</span> <span class="d_keyword">ref</span> S4) {} }
 1024 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S5 { <span class="d_keyword">void</span> opPostMove(S5) {} }
 1025 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S6 { <span class="d_keyword">void</span> opPostMove(<span class="d_keyword">int</span>) {} }
 1026 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S7 { S3[1] field; }
 1027 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S8 { S3[] field; }
 1028 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S9 { S3[0] field; }
 1029 <span class="d_keyword">static</span> <span class="d_keyword">struct</span> S10 { @disable <span class="d_keyword">this</span>(); S3 field; }
 1030 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateMove</span>!S1);
 1031 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateMove</span>!S2);
 1032 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateMove</span>!S3);
 1033 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateMove</span>!(<span class="d_keyword">immutable</span> S3));
 1034 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateMove</span>!S4);
 1035 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateMove</span>!S5);
 1036 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateMove</span>!S6);
 1037 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateMove</span>!S7);
 1038 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateMove</span>!S8);
 1039 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasElaborateMove</span>!S9);
 1040 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasElaborateMove</span>!S10);
 1041 </pre>
 1042 </div></div>
 1043 
 1044 </dd>
 1045 <dt class="d_decl"><div ><span class="def-anchor" id=".hasMember"></span><div class="quickindex" id="quickindex.hasMember"></div>enum auto <span class="def-anchor" id="hasMember"></span><code class="ddoc_psymbol">hasMember</code>(T, string name);
 1046 <br></div></dt>
 1047 <dd><div class="summary">Yields <span class="d_inlinecode donthyphenate notranslate">true</span> if and only if <span class="d_inlinecode donthyphenate notranslate">T</span> is an aggregate that defines
 1048    a symbol called <span class="d_inlinecode donthyphenate notranslate">name</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasMember</span>!(<span class="d_keyword">int</span>, <span class="d_string">"blah"</span>));
 1049 <span class="d_keyword">struct</span> S1 { <span class="d_keyword">int</span> blah; }
 1050 <span class="d_keyword">struct</span> S2 { <span class="d_keyword">int</span> blah(){ <span class="d_keyword">return</span> 0; } }
 1051 <span class="d_keyword">class</span> C1 { <span class="d_keyword">int</span> blah; }
 1052 <span class="d_keyword">class</span> C2 { <span class="d_keyword">int</span> blah(){ <span class="d_keyword">return</span> 0; } }
 1053 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasMember</span>!(S1, <span class="d_string">"blah"</span>));
 1054 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasMember</span>!(S2, <span class="d_string">"blah"</span>));
 1055 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasMember</span>!(C1, <span class="d_string">"blah"</span>));
 1056 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">hasMember</span>!(C2, <span class="d_string">"blah"</span>));
 1057 </pre>
 1058 </div></div>
 1059 
 1060 </dd>
 1061 <dt class="d_decl"><div ><span class="def-anchor" id=".hasStaticMember"></span><div class="quickindex" id="quickindex.hasStaticMember"></div>template <span class="def-anchor" id="hasStaticMember"></span><code class="ddoc_psymbol">hasStaticMember</code>(T, string member)<br></div></dt>
 1062 <dd><div class="summary">Whether the symbol represented by the string, member, exists and is a static member of T.
 1063 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
 1064 <td class="param_desc">Type containing symbol <span class="d_inlinecode donthyphenate notranslate">member</span>.</td></tr>
 1065 <tr class="param"><td class="param_id">member</td>
 1066 <td class="param_desc">Name of symbol to test that resides in <span class="d_inlinecode donthyphenate notranslate">T</span>.</td></tr>
 1067 </table></div></div>
 1068 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><span class="d_inlinecode donthyphenate notranslate">true</span> iff <span class="d_inlinecode donthyphenate notranslate">member</span> exists and is static.</div></div>
 1069 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">struct</span> S
 1070 {
 1071     <span class="d_keyword">static</span> <span class="d_keyword">void</span> sf() {}
 1072     <span class="d_keyword">void</span> f() {}
 1073 
 1074     <span class="d_keyword">static</span> <span class="d_keyword">int</span> si;
 1075     <span class="d_keyword">int</span> i;
 1076 }
 1077 
 1078 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasStaticMember</span>!(S, <span class="d_string">"sf"</span>));
 1079 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasStaticMember</span>!(S, <span class="d_string">"f"</span>));
 1080 
 1081 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">hasStaticMember</span>!(S, <span class="d_string">"si"</span>));
 1082 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasStaticMember</span>!(S, <span class="d_string">"i"</span>));
 1083 
 1084 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">hasStaticMember</span>!(S, <span class="d_string">"hello"</span>));
 1085 </pre>
 1086 </div></div>
 1087 
 1088 </dd>
 1089 <dt class="d_decl"><div ><span class="def-anchor" id=".EnumMembers"></span><div class="quickindex" id="quickindex.EnumMembers"></div>template <span class="def-anchor" id="EnumMembers"></span><code class="ddoc_psymbol">EnumMembers</code>(E) if (is(E == enum))<br></div></dt>
 1090 <dd><div class="summary">Retrieves the members of an enumerated type <span class="d_inlinecode donthyphenate notranslate">enum E</span>.
 1091 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">E</td>
 1092 <td class="param_desc">An enumerated type. <span class="d_inlinecode donthyphenate notranslate">E</span> may have duplicated values.</td></tr>
 1093 </table></div></div>
 1094 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">Static tuple composed of the members of the enumerated type <span class="d_inlinecode donthyphenate notranslate">E</span>.
 1095     The members are arranged in the same order as declared in <span class="d_inlinecode donthyphenate notranslate">E</span>.
 1096     The name of the enum can be found by querying the compiler for the
 1097     name of the identifier, i.e. <span class="d_inlinecode donthyphenate notranslate">__traits(identifier, <span class="def-anchor" id="EnumMembers"></span><code class="ddoc_psymbol">EnumMembers</code>!MyEnum[i])</span>.
 1098     For enumerations with unique values, <a href="std_conv.html#.to"><span class="d_inlinecode donthyphenate notranslate">std.conv.to</span></a> can also be used.
 1099 
 1100 </div></div>
 1101 <div class="val"><p class="keyval Section"><span class="key keySection">Note</span>
 1102 An enum can have multiple members which have the same value. If you want
 1103     to use EnumMembers to e.g. generate switch cases at compile-time,
 1104     you should use the <a href="std_meta.html#.NoDuplicates"><span class="d_inlinecode donthyphenate notranslate">std.meta.NoDuplicates</span></a> template to avoid
 1105     generating duplicate switch cases.
 1106 
 1107 </p></div>
 1108 <div class="val"><p class="keyval Section"><span class="key keySection">Note</span>
 1109     Returned values are strictly typed with <span class="d_inlinecode donthyphenate notranslate">E</span>. Thus, the following code
 1110     does not work without the explicit cast:
 1111 <pre class="d_code notranslate"><span class="d_keyword">enum</span> E : <span class="d_keyword">int</span> { a, b, c }
 1112 <span class="d_keyword">int</span>[] abc = <span class="d_keyword">cast</span>(<span class="d_keyword">int</span>[]) [ <span class="d_psymbol">EnumMembers</span>!E ];
 1113 </pre>
 1114     Cast is not necessary if the type of the variable is inferred. See the
 1115     example below.</p></div>
 1116 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples">Create an array of enumerated values
 1117 <pre class="d_code notranslate"><span class="d_keyword">enum</span> Sqrts : <span class="d_keyword">real</span>
 1118 {
 1119     one = 1,
 1120     two = 1.41421,
 1121     three = 1.73205
 1122 }
 1123 <span class="d_keyword">auto</span> sqrts = [<span class="d_psymbol">EnumMembers</span>!Sqrts];
 1124 writeln(sqrts); <span class="d_comment">// [Sqrts.one, Sqrts.two, Sqrts.three]
 1125 </span></pre>
 1126 </div></div>
 1127 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples">A generic function <span class="d_inlinecode donthyphenate notranslate">rank(v)</span> in the following example uses this
 1128 template for finding a member <span class="d_inlinecode donthyphenate notranslate">e</span> in an enumerated type <span class="d_inlinecode donthyphenate notranslate">E</span>.
 1129 <pre class="d_code notranslate"><span class="d_comment">// Returns i if e is the i-th enumerator of E.
 1130 </span><span class="d_keyword">static</span> size_t rank(E)(E e)
 1131 <span class="d_keyword">if</span> (<span class="d_keyword">is</span>(E == <span class="d_keyword">enum</span>))
 1132 {
 1133     <span class="d_keyword">static</span> <span class="d_keyword">foreach</span> (i, member; <span class="d_psymbol">EnumMembers</span>!E)
 1134     {
 1135         <span class="d_keyword">if</span> (e == member)
 1136             <span class="d_keyword">return</span> i;
 1137     }
 1138     <span class="d_keyword">assert</span>(0, <span class="d_string">"Not an enum member"</span>);
 1139 }
 1140 
 1141 <span class="d_keyword">enum</span> Mode
 1142 {
 1143     read = 1,
 1144     write = 2,
 1145     map = 4
 1146 }
 1147 writeln(rank(Mode.read)); <span class="d_comment">// 0
 1148 </span>writeln(rank(Mode.write)); <span class="d_comment">// 1
 1149 </span>writeln(rank(Mode.map)); <span class="d_comment">// 2
 1150 </span></pre>
 1151 </div></div>
 1152 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples">Use EnumMembers to generate a switch statement using static foreach.
 1153 <pre class="d_code notranslate"><span class="d_keyword">import</span> std.conv : to;
 1154 <span class="d_keyword">class</span> FooClass
 1155 {
 1156     string calledMethod;
 1157     <span class="d_keyword">void</span> foo() @safe { calledMethod = <span class="d_string">"foo"</span>; }
 1158     <span class="d_keyword">void</span> bar() @safe { calledMethod = <span class="d_string">"bar"</span>; }
 1159     <span class="d_keyword">void</span> baz() @safe { calledMethod = <span class="d_string">"baz"</span>; }
 1160 }
 1161 
 1162 <span class="d_keyword">enum</span> FooEnum { foo, bar, baz }
 1163 
 1164 <span class="d_keyword">auto</span> var = FooEnum.bar;
 1165 <span class="d_keyword">auto</span> fooObj = <span class="d_keyword">new</span> FooClass();
 1166 s: <span class="d_keyword">final</span> <span class="d_keyword">switch</span> (var)
 1167 {
 1168     <span class="d_keyword">static</span> <span class="d_keyword">foreach</span> (member; <span class="d_psymbol">EnumMembers</span>!FooEnum)
 1169     {
 1170         <span class="d_keyword">case</span> member: <span class="d_comment">// Generate a case for each enum value.
 1171 </span>            <span class="d_comment">// Call fooObj.{name of enum value}().
 1172 </span>            <span class="d_keyword">__traits</span>(getMember, fooObj, to!string(member))();
 1173             <span class="d_keyword">break</span> s;
 1174     }
 1175 }
 1176 <span class="d_comment">// As we pass in FooEnum.bar, the bar() method gets called.
 1177 </span>writeln(fooObj.calledMethod); <span class="d_comment">// "bar"
 1178 </span></pre>
 1179 </div></div>
 1180 
 1181 </dd>
 1182 <dt class="d_decl"><div ><span class="def-anchor" id=".BaseTypeTuple"></span><div class="quickindex" id="quickindex.BaseTypeTuple"></div>template <span class="def-anchor" id="BaseTypeTuple"></span><code class="ddoc_psymbol">BaseTypeTuple</code>(A)<br></div></dt>
 1183 <dd><div class="summary">Get a <span class="d_param">AliasSeq</span> of the base class and base interfaces of
 1184  this class or interface. <span class="d_param">BaseTypeTuple!Object</span> returns
 1185  the empty type tuple.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">import</span> std.meta : AliasSeq;
 1186 
 1187 <span class="d_keyword">interface</span> I1 { }
 1188 <span class="d_keyword">interface</span> I2 { }
 1189 <span class="d_keyword">interface</span> I12 : I1, I2 { }
 1190 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">BaseTypeTuple</span>!I12 == AliasSeq!(I1, I2)));
 1191 
 1192 <span class="d_keyword">interface</span> I3 : I1 { }
 1193 <span class="d_keyword">interface</span> I123 : I1, I2, I3 { }
 1194 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">BaseTypeTuple</span>!I123 == AliasSeq!(I1, I2, I3)));
 1195 </pre>
 1196 </div></div>
 1197 
 1198 </dd>
 1199 <dt class="d_decl"><div ><span class="def-anchor" id=".BaseClassesTuple"></span><div class="quickindex" id="quickindex.BaseClassesTuple"></div>template <span class="def-anchor" id="BaseClassesTuple"></span><code class="ddoc_psymbol">BaseClassesTuple</code>(T) if (is(T == class))<br></div></dt>
 1200 <dd><div class="summary">Get a <span class="d_param">AliasSeq</span> of <i>all</i> base classes of this class,
 1201  in decreasing order. Interfaces are not included. <span class="d_param"> BaseClassesTuple!Object</span> yields the empty type tuple.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">import</span> std.meta : AliasSeq;
 1202 
 1203 <span class="d_keyword">class</span> C1 { }
 1204 <span class="d_keyword">class</span> C2 : C1 { }
 1205 <span class="d_keyword">class</span> C3 : C2 { }
 1206 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">BaseClassesTuple</span>!Object.length);
 1207 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">BaseClassesTuple</span>!C1 == AliasSeq!(Object)));
 1208 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">BaseClassesTuple</span>!C2 == AliasSeq!(C1, Object)));
 1209 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">BaseClassesTuple</span>!C3 == AliasSeq!(C2, C1, Object)));
 1210 </pre>
 1211 </div></div>
 1212 
 1213 </dd>
 1214 <dt class="d_decl"><div ><span class="def-anchor" id=".InterfacesTuple"></span><div class="quickindex" id="quickindex.InterfacesTuple"></div>template <span class="def-anchor" id="InterfacesTuple"></span><code class="ddoc_psymbol">InterfacesTuple</code>(T)<br></div></dt>
 1215 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
 1216 <td class="param_desc">The <span class="d_inlinecode donthyphenate notranslate">class</span> or <span class="d_inlinecode donthyphenate notranslate">interface</span> to search.</td></tr>
 1217 </table></div></div>
 1218 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns"><a href="std_meta.html#.AliasSeq"><span class="d_inlinecode donthyphenate notranslate">std.meta.AliasSeq</span></a> of all interfaces directly or
 1219     indirectly inherited by this class or interface. Interfaces
 1220     do not repeat if multiply implemented.
 1221 <div class="blankline"></div>
 1222 
 1223     <span class="d_inlinecode donthyphenate notranslate"><span class="def-anchor" id="InterfacesTuple"></span><code class="ddoc_psymbol">InterfacesTuple</code>!Object</span> yields an empty <span class="d_inlinecode donthyphenate notranslate">AliasSeq</span>.</div></div>
 1224 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">interface</span> I1 {}
 1225 <span class="d_keyword">interface</span> I2 {}
 1226 <span class="d_keyword">class</span> A : I1, I2 {}
 1227 <span class="d_keyword">class</span> B : A, I1 {}
 1228 <span class="d_keyword">class</span> C : B {}
 1229 
 1230 <span class="d_keyword">alias</span> TL = <span class="d_psymbol">InterfacesTuple</span>!C;
 1231 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(TL[0] == I1) &amp;&amp; <span class="d_keyword">is</span>(TL[1] == I2));
 1232 </pre>
 1233 </div></div>
 1234 
 1235 </dd>
 1236 <dt class="d_decl"><div ><span class="def-anchor" id=".TransitiveBaseTypeTuple"></span><div class="quickindex" id="quickindex.TransitiveBaseTypeTuple"></div>template <span class="def-anchor" id="TransitiveBaseTypeTuple"></span><code class="ddoc_psymbol">TransitiveBaseTypeTuple</code>(T)<br></div></dt>
 1237 <dd><div class="summary">Get a <span class="d_param">AliasSeq</span> of <i>all</i> base classes of <span class="d_param"> T</span>, in decreasing order, followed by <span class="d_param">T</span>'s
 1238  interfaces. <span class="d_param">TransitiveBaseTypeTuple!Object</span> yields the
 1239  empty type tuple.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">interface</span> J1 {}
 1240 <span class="d_keyword">interface</span> J2 {}
 1241 <span class="d_keyword">class</span> B1 {}
 1242 <span class="d_keyword">class</span> B2 : B1, J1, J2 {}
 1243 <span class="d_keyword">class</span> B3 : B2, J1 {}
 1244 <span class="d_keyword">alias</span> TL = <span class="d_psymbol">TransitiveBaseTypeTuple</span>!B3;
 1245 writeln(TL.length); <span class="d_comment">// 5
 1246 </span><span class="d_keyword">assert</span>(<span class="d_keyword">is</span> (TL[0] == B2));
 1247 <span class="d_keyword">assert</span>(<span class="d_keyword">is</span> (TL[1] == B1));
 1248 <span class="d_keyword">assert</span>(<span class="d_keyword">is</span> (TL[2] == Object));
 1249 <span class="d_keyword">assert</span>(<span class="d_keyword">is</span> (TL[3] == J1));
 1250 <span class="d_keyword">assert</span>(<span class="d_keyword">is</span> (TL[4] == J2));
 1251 
 1252 writeln(<span class="d_psymbol">TransitiveBaseTypeTuple</span>!Object.length); <span class="d_comment">// 0
 1253 </span></pre>
 1254 </div></div>
 1255 
 1256 </dd>
 1257 <dt class="d_decl"><div ><span class="def-anchor" id=".MemberFunctionsTuple"></span><div class="quickindex" id="quickindex.MemberFunctionsTuple"></div>template <span class="def-anchor" id="MemberFunctionsTuple"></span><code class="ddoc_psymbol">MemberFunctionsTuple</code>(C, string name) if (is(C == class) || is(C == interface))<br></div></dt>
 1258 <dd><div class="summary">Returns a tuple of non-static functions with the name <span class="d_inlinecode donthyphenate notranslate">name</span> declared in the
 1259 class or interface <span class="d_inlinecode donthyphenate notranslate">C</span>.  Covariant duplicates are shrunk into the most
 1260 derived one.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">interface</span> I { I foo(); }
 1261 <span class="d_keyword">class</span> B
 1262 {
 1263     <span class="d_keyword">real</span> foo(<span class="d_keyword">real</span> v) { <span class="d_keyword">return</span> v; }
 1264 }
 1265 <span class="d_keyword">class</span> C : B, I
 1266 {
 1267     <span class="d_keyword">override</span> C foo() { <span class="d_keyword">return</span> <span class="d_keyword">this</span>; } <span class="d_comment">// covariant overriding of I.foo()
 1268 </span>}
 1269 <span class="d_keyword">alias</span> foos = <span class="d_psymbol">MemberFunctionsTuple</span>!(C, <span class="d_string">"foo"</span>);
 1270 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(foos.length == 2);
 1271 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(isSame, foos[0], C.foo));
 1272 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(isSame, foos[1], B.foo));
 1273 </pre>
 1274 </div></div>
 1275 
 1276 </dd>
 1277 <dt class="d_decl"><div ><span class="def-anchor" id=".TemplateOf"></span><div class="quickindex" id="quickindex.TemplateOf"></div>template <span class="def-anchor" id="TemplateOf"></span><code class="ddoc_psymbol">TemplateOf</code>(alias T : Base!Args, alias Base, Args...)<br><br>template <span class="def-anchor" id="TemplateOf"></span><code class="ddoc_psymbol">TemplateOf</code>(T : Base!Args, alias Base, Args...)<br><br>template <span class="def-anchor" id="TemplateOf"></span><code class="ddoc_psymbol">TemplateOf</code>(T)<br></div></dt>
 1278 <dd><div class="summary">Returns an alias to the template that <span class="d_inlinecode donthyphenate notranslate">T</span> is an instance of.
 1279 It will return <span class="d_inlinecode donthyphenate notranslate">void</span> if a symbol without a template is given.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">struct</span> Foo(T, U) {}
 1280 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">__traits</span>(isSame, <span class="d_psymbol">TemplateOf</span>!(Foo!(<span class="d_keyword">int</span>, <span class="d_keyword">real</span>)), Foo));
 1281 </pre>
 1282 </div></div>
 1283 
 1284 </dd>
 1285 <dt class="d_decl"><div ><span class="def-anchor" id=".TemplateArgsOf"></span><div class="quickindex" id="quickindex.TemplateArgsOf"></div>template <span class="def-anchor" id="TemplateArgsOf"></span><code class="ddoc_psymbol">TemplateArgsOf</code>(alias T : Base!Args, alias Base, Args...)<br><br>template <span class="def-anchor" id="TemplateArgsOf"></span><code class="ddoc_psymbol">TemplateArgsOf</code>(T : Base!Args, alias Base, Args...)<br></div></dt>
 1286 <dd><div class="summary">Returns a <span class="d_inlinecode donthyphenate notranslate">AliasSeq</span> of the template arguments used to instantiate <span class="d_inlinecode donthyphenate notranslate">T</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">import</span> std.meta : AliasSeq;
 1287 
 1288 <span class="d_keyword">struct</span> Foo(T, U) {}
 1289 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">TemplateArgsOf</span>!(Foo!(<span class="d_keyword">int</span>, <span class="d_keyword">real</span>)) == AliasSeq!(<span class="d_keyword">int</span>, <span class="d_keyword">real</span>)));
 1290 </pre>
 1291 </div></div>
 1292 
 1293 </dd>
 1294 <dt class="d_decl"><div ><span class="def-anchor" id=".classInstanceAlignment"></span><div class="quickindex" id="quickindex.classInstanceAlignment"></div>template <span class="def-anchor" id="classInstanceAlignment"></span><code class="ddoc_psymbol">classInstanceAlignment</code>(T) if (is(T == class))<br></div></dt>
 1295 <dd><div class="summary">Returns class instance alignment.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">class</span> A { <span class="d_keyword">byte</span> b; }
 1296 <span class="d_keyword">class</span> B { <span class="d_keyword">long</span> l; }
 1297 
 1298 <span class="d_comment">// As class instance always has a hidden pointer
 1299 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">classInstanceAlignment</span>!A == (<span class="d_keyword">void</span>*).alignof);
 1300 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">classInstanceAlignment</span>!B == <span class="d_keyword">long</span>.alignof);
 1301 </pre>
 1302 </div></div>
 1303 
 1304 </dd>
 1305 <dt class="d_decl"><div ><span class="def-anchor" id=".CommonType"></span><div class="quickindex" id="quickindex.CommonType"></div>template <span class="def-anchor" id="CommonType"></span><code class="ddoc_psymbol">CommonType</code>(T...)<br></div></dt>
 1306 <dd><div class="summary">Get the type that all types can be implicitly converted to. Useful
 1307 e.g. in figuring out an array type from a bunch of initializing
 1308 values. Returns <span class="d_param">void</span> if passed an empty list, or if the
 1309 types have no common type.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">alias</span> X = <span class="d_psymbol">CommonType</span>!(<span class="d_keyword">int</span>, <span class="d_keyword">long</span>, <span class="d_keyword">short</span>);
 1310 <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(X == <span class="d_keyword">long</span>));
 1311 <span class="d_keyword">alias</span> Y = <span class="d_psymbol">CommonType</span>!(<span class="d_keyword">int</span>, <span class="d_keyword">char</span>[], <span class="d_keyword">short</span>);
 1312 <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(Y == <span class="d_keyword">void</span>));
 1313 </pre>
 1314 </div></div>
 1315 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">CommonType</span>!(3) == <span class="d_keyword">int</span>));
 1316 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">CommonType</span>!(<span class="d_keyword">double</span>, 4, <span class="d_keyword">float</span>) == <span class="d_keyword">double</span>));
 1317 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">CommonType</span>!(string, <span class="d_keyword">char</span>[]) == <span class="d_keyword">const</span>(<span class="d_keyword">char</span>)[]));
 1318 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">CommonType</span>!(3, 3U) == <span class="d_keyword">uint</span>));
 1319 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">CommonType</span>!(<span class="d_keyword">double</span>, <span class="d_keyword">int</span>) == <span class="d_keyword">double</span>));
 1320 </pre>
 1321 </div></div>
 1322 
 1323 </dd>
 1324 <dt class="d_decl"><div ><span class="def-anchor" id=".ImplicitConversionTargets"></span><div class="quickindex" id="quickindex.ImplicitConversionTargets"></div>template <span class="def-anchor" id="ImplicitConversionTargets"></span><code class="ddoc_psymbol">ImplicitConversionTargets</code>(T)<br></div></dt>
 1325 <dd><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
 1326 <td class="param_desc">The type to check</td></tr>
 1327 </table></div></div>
 1328 <div class="keyval Returns"><span class="key keyReturns">Returns:</span> <div class="val valReturns">An <a href="std_meta.html#.AliasSeq"><span class="d_inlinecode donthyphenate notranslate">std.meta.AliasSeq</span></a> with all possible target types of an implicit
 1329     conversion <span class="d_inlinecode donthyphenate notranslate">T</span>.
 1330 <div class="blankline"></div>
 1331 
 1332     If <span class="d_inlinecode donthyphenate notranslate">T</span> is a class derived from <span class="d_inlinecode donthyphenate notranslate">Object</span>, the the result of
 1333     <a href="#TransitiveBaseTypeTuple"><span class="d_inlinecode donthyphenate notranslate">TransitiveBaseTypeTuple</span></a> is returned.
 1334 <div class="blankline"></div>
 1335 
 1336     If the type is not a built-in value type or a class derived from
 1337     <span class="d_inlinecode donthyphenate notranslate">Object</span>, the an empty <a href="std_meta.html#.AliasSeq"><span class="d_inlinecode donthyphenate notranslate">std.meta.AliasSeq</span></a> is returned.
 1338 
 1339 </div></div>
 1340 <div class="val"><p class="keyval Section"><span class="key keySection">Note</span>
 1341 The possible targets are computed more conservatively than the
 1342     language allows, eliminating all dangerous conversions. For example,
 1343     <span class="d_inlinecode donthyphenate notranslate"><span class="def-anchor" id="ImplicitConversionTargets"></span><code class="ddoc_psymbol">ImplicitConversionTargets</code>!double</span> does not include <span class="d_inlinecode donthyphenate notranslate">float</span>.
 1344 
 1345 </p></div>
 1346 <div class="keyval SeeAlso"><span class="key keySeeAlso">See Also:</span> <div class="val valSeeAlso"><a href="#isImplicitlyConvertible"><span class="d_inlinecode donthyphenate notranslate">isImplicitlyConvertible</span></a></div></div>
 1347 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">import</span> std.meta : AliasSeq;
 1348 
 1349 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">ulong</span>) == AliasSeq!(<span class="d_keyword">float</span>, <span class="d_keyword">double</span>, <span class="d_keyword">real</span>)));
 1350 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">int</span>) == AliasSeq!(<span class="d_keyword">long</span>, <span class="d_keyword">ulong</span>, <span class="d_keyword">float</span>, <span class="d_keyword">double</span>, <span class="d_keyword">real</span>)));
 1351 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">float</span>) == AliasSeq!(<span class="d_keyword">double</span>, <span class="d_keyword">real</span>)));
 1352 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">double</span>) == AliasSeq!(<span class="d_keyword">real</span>)));
 1353 
 1354 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">char</span>) == AliasSeq!(
 1355     <span class="d_keyword">wchar</span>, <span class="d_keyword">dchar</span>, <span class="d_keyword">byte</span>, <span class="d_keyword">ubyte</span>, <span class="d_keyword">short</span>, <span class="d_keyword">ushort</span>, <span class="d_keyword">int</span>, <span class="d_keyword">uint</span>, <span class="d_keyword">long</span>, <span class="d_keyword">ulong</span>, <span class="d_keyword">float</span>, <span class="d_keyword">double</span>, <span class="d_keyword">real</span>
 1356 )));
 1357 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">wchar</span>) == AliasSeq!(
 1358     <span class="d_keyword">dchar</span>, <span class="d_keyword">short</span>, <span class="d_keyword">ushort</span>, <span class="d_keyword">int</span>, <span class="d_keyword">uint</span>, <span class="d_keyword">long</span>, <span class="d_keyword">ulong</span>, <span class="d_keyword">float</span>, <span class="d_keyword">double</span>, <span class="d_keyword">real</span>
 1359 )));
 1360 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">dchar</span>) == AliasSeq!(
 1361     <span class="d_keyword">int</span>, <span class="d_keyword">uint</span>, <span class="d_keyword">long</span>, <span class="d_keyword">ulong</span>, <span class="d_keyword">float</span>, <span class="d_keyword">double</span>, <span class="d_keyword">real</span>
 1362 )));
 1363 
 1364 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(string) == AliasSeq!(<span class="d_keyword">const</span>(<span class="d_keyword">char</span>)[])));
 1365 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">void</span>*) == AliasSeq!(<span class="d_keyword">void</span>*)));
 1366 
 1367 <span class="d_keyword">interface</span> A {}
 1368 <span class="d_keyword">interface</span> B {}
 1369 <span class="d_keyword">class</span> C : A, B {}
 1370 
 1371 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(C) == AliasSeq!(Object, A, B)));
 1372 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">const</span> C) == AliasSeq!(<span class="d_keyword">const</span> Object, <span class="d_keyword">const</span> A, <span class="d_keyword">const</span> B)));
 1373 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_psymbol">ImplicitConversionTargets</span>!(<span class="d_keyword">immutable</span> C) == AliasSeq!(
 1374     <span class="d_keyword">immutable</span> Object, <span class="d_keyword">immutable</span> A, <span class="d_keyword">immutable</span> B
 1375 )));
 1376 </pre>
 1377 </div></div>
 1378 
 1379 </dd>
 1380 <dt class="d_decl"><div ><span class="def-anchor" id=".isImplicitlyConvertible"></span><div class="quickindex" id="quickindex.isImplicitlyConvertible"></div>enum bool <span class="def-anchor" id="isImplicitlyConvertible"></span><code class="ddoc_psymbol">isImplicitlyConvertible</code>(From, To);
 1381 <br></div></dt>
 1382 <dd><div class="summary">Is <span class="d_inlinecode donthyphenate notranslate">From</span> implicitly convertible to <span class="d_inlinecode donthyphenate notranslate">To</span>?</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">char</span>), <span class="d_keyword">char</span>));
 1383 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">char</span>), <span class="d_keyword">char</span>));
 1384 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">char</span>, <span class="d_keyword">wchar</span>));
 1385 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">wchar</span>, <span class="d_keyword">char</span>));
 1386 
 1387 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">ushort</span>), <span class="d_keyword">ubyte</span>));
 1388 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">uint</span>), <span class="d_keyword">ubyte</span>));
 1389 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">ulong</span>), <span class="d_keyword">ubyte</span>));
 1390 
 1391 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isImplicitlyConvertible</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">char</span>)[], string));
 1392 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isImplicitlyConvertible</span>!(string, <span class="d_keyword">const</span>(<span class="d_keyword">char</span>)[]));
 1393 </pre>
 1394 </div></div>
 1395 
 1396 </dd>
 1397 <dt class="d_decl"><div ><span class="def-anchor" id=".isAssignable"></span><div class="quickindex" id="quickindex.isAssignable"></div>enum auto <span class="def-anchor" id="isAssignable"></span><code class="ddoc_psymbol">isAssignable</code>(Lhs, Rhs = Lhs);
 1398 <br></div></dt>
 1399 <dd><div class="summary">Returns <span class="d_inlinecode donthyphenate notranslate">true</span> iff a value of type <span class="d_inlinecode donthyphenate notranslate">Rhs</span> can be assigned to a variable of
 1400 type <span class="d_inlinecode donthyphenate notranslate">Lhs</span>.
 1401 </div><div class="description"><span class="d_inlinecode donthyphenate notranslate"><span class="def-anchor" id="isAssignable"></span><code class="ddoc_psymbol">isAssignable</code></span> returns whether both an lvalue and rvalue can be assigned.
 1402 <div class="blankline"></div>
 1403 
 1404 If you omit <span class="d_inlinecode donthyphenate notranslate">Rhs</span>, <span class="d_inlinecode donthyphenate notranslate"><span class="def-anchor" id="isAssignable"></span><code class="ddoc_psymbol">isAssignable</code></span> will check identity assignable of <span class="d_inlinecode donthyphenate notranslate">Lhs</span>.</div>
 1405 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isAssignable</span>!(<span class="d_keyword">long</span>, <span class="d_keyword">int</span>));
 1406 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isAssignable</span>!(<span class="d_keyword">int</span>, <span class="d_keyword">long</span>));
 1407 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isAssignable</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">char</span>)[], string));
 1408 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isAssignable</span>!(string, <span class="d_keyword">char</span>[]));
 1409 
 1410 <span class="d_comment">// int is assignable to int
 1411 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isAssignable</span>!<span class="d_keyword">int</span>);
 1412 
 1413 <span class="d_comment">// immutable int is not assignable to immutable int
 1414 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isAssignable</span>!(<span class="d_keyword">immutable</span> <span class="d_keyword">int</span>));
 1415 </pre>
 1416 </div></div>
 1417 
 1418 </dd>
 1419 <dt class="d_decl"><div ><span class="def-anchor" id=".isCovariantWith"></span><div class="quickindex" id="quickindex.isCovariantWith"></div>template <span class="def-anchor" id="isCovariantWith"></span><code class="ddoc_psymbol">isCovariantWith</code>(F, G) if (is(F == function) &amp;&amp; is(G == function) || is(F == delegate) &amp;&amp; is(G == delegate) || isFunctionPointer!F &amp;&amp; isFunctionPointer!G)<br></div></dt>
 1420 <dd><div class="summary">Determines whether the function type <span class="d_inlinecode donthyphenate notranslate">F</span> is covariant with <span class="d_inlinecode donthyphenate notranslate">G</span>, i.e.,
 1421 functions of the type <span class="d_inlinecode donthyphenate notranslate">F</span> can override ones of the type <span class="d_inlinecode donthyphenate notranslate">G</span>.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">interface</span> I { I clone(); }
 1422 <span class="d_keyword">interface</span> J { J clone(); }
 1423 <span class="d_keyword">class</span> C : I
 1424 {
 1425     <span class="d_keyword">override</span> C clone()   <span class="d_comment">// covariant overriding of I.clone()
 1426 </span>    {
 1427         <span class="d_keyword">return</span> <span class="d_keyword">new</span> C;
 1428     }
 1429 }
 1430 
 1431 <span class="d_comment">// C.clone() can override I.clone(), indeed.
 1432 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isCovariantWith</span>!(<span class="d_keyword">typeof</span>(C.clone), <span class="d_keyword">typeof</span>(I.clone)));
 1433 
 1434 <span class="d_comment">// C.clone() can't override J.clone(); the return type C is not implicitly
 1435 </span><span class="d_comment">// convertible to J.
 1436 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isCovariantWith</span>!(<span class="d_keyword">typeof</span>(C.clone), <span class="d_keyword">typeof</span>(J.clone)));
 1437 </pre>
 1438 </div></div>
 1439 
 1440 </dd>
 1441 <dt class="d_decl"><div ><span class="def-anchor" id=".rvalueOf"></span><div class="quickindex" id="quickindex.rvalueOf"></div>@property T <span class="def-anchor" id="rvalueOf"></span><code class="ddoc_psymbol">rvalueOf</code><span class="template_param_list" title="Template parameter list">(T)</span>(inout __InoutWorkaroundStruct = __InoutWorkaroundStruct.init);
 1442 <br><br><span class="def-anchor" id=".lvalueOf"></span><div class="quickindex" id="quickindex.lvalueOf"></div>@property ref T <span class="def-anchor" id="lvalueOf"></span><code class="ddoc_psymbol">lvalueOf</code><span class="template_param_list" title="Template parameter list">(T)</span>(inout __InoutWorkaroundStruct = __InoutWorkaroundStruct.init);
 1443 <br></div></dt>
 1444 <dd><div class="summary">Creates an lvalue or rvalue of type <span class="d_inlinecode donthyphenate notranslate">T</span> for <span class="d_inlinecode donthyphenate notranslate">typeof(...)</span> and
 1445 <span class="d_inlinecode donthyphenate notranslate">__traits(compiles, ...)</span> purposes. No actual value is returned.
 1446 </div><div class="keyval Parameters"><span class="key keyParameters">Parameters:</span> <div class="val valParameters"><table class="params"><tr class="param"><td class="param_id">T</td>
 1447 <td class="param_desc">The type to transform</td></tr>
 1448 </table></div></div>
 1449 <div class="val"><p class="keyval Section"><span class="key keySection">Note</span>
 1450 Trying to use returned value will result in a
 1451 "Symbol Undefined" error at link time.</p></div>
 1452 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">int</span> f(<span class="d_keyword">int</span>);
 1453 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_keyword">typeof</span>(f(<span class="d_psymbol">rvalueOf</span>!<span class="d_keyword">int</span>)) == <span class="d_keyword">int</span>));
 1454 </pre>
 1455 </div></div>
 1456 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">bool</span> f(<span class="d_keyword">ref</span> <span class="d_keyword">int</span>);
 1457 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_keyword">is</span>(<span class="d_keyword">typeof</span>(f(<span class="d_psymbol">lvalueOf</span>!<span class="d_keyword">int</span>)) == <span class="d_keyword">bool</span>));
 1458 </pre>
 1459 </div></div>
 1460 
 1461 </dd>
 1462 <dt class="d_decl"><div ><span class="def-anchor" id=".isBoolean"></span><div class="quickindex" id="quickindex.isBoolean"></div>enum bool <span class="def-anchor" id="isBoolean"></span><code class="ddoc_psymbol">isBoolean</code>(T);
 1463 <br></div></dt>
 1464 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a built-in boolean type.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isBoolean</span>!<span class="d_keyword">bool</span>);
 1465 <span class="d_keyword">enum</span> EB : <span class="d_keyword">bool</span> { a = <span class="d_keyword">true</span> }
 1466 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isBoolean</span>!EB);
 1467 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isBoolean</span>!(SubTypeOf!<span class="d_keyword">bool</span>));
 1468 </pre>
 1469 </div></div>
 1470 
 1471 </dd>
 1472 <dt class="d_decl"><div ><span class="def-anchor" id=".isIntegral"></span><div class="quickindex" id="quickindex.isIntegral"></div>enum bool <span class="def-anchor" id="isIntegral"></span><code class="ddoc_psymbol">isIntegral</code>(T);
 1473 <br></div></dt>
 1474 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a built-in integral type. Types <span class="d_inlinecode donthyphenate notranslate">bool</span>,
 1475  <span class="d_inlinecode donthyphenate notranslate">char</span>, <span class="d_inlinecode donthyphenate notranslate">wchar</span>, and <span class="d_inlinecode donthyphenate notranslate">dchar</span> are not considered integral.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1476     <span class="d_psymbol">isIntegral</span>!<span class="d_keyword">byte</span> &amp;&amp;
 1477     <span class="d_psymbol">isIntegral</span>!<span class="d_keyword">short</span> &amp;&amp;
 1478     <span class="d_psymbol">isIntegral</span>!<span class="d_keyword">int</span> &amp;&amp;
 1479     <span class="d_psymbol">isIntegral</span>!<span class="d_keyword">long</span> &amp;&amp;
 1480     <span class="d_psymbol">isIntegral</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">long</span>)) &amp;&amp;
 1481     <span class="d_psymbol">isIntegral</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">long</span>))
 1482 );
 1483 
 1484 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1485     !<span class="d_psymbol">isIntegral</span>!<span class="d_keyword">bool</span> &amp;&amp;
 1486     !<span class="d_psymbol">isIntegral</span>!<span class="d_keyword">char</span> &amp;&amp;
 1487     !<span class="d_psymbol">isIntegral</span>!<span class="d_keyword">double</span>
 1488 );
 1489 
 1490 <span class="d_comment">// types which act as integral values do not pass
 1491 </span><span class="d_keyword">struct</span> S
 1492 {
 1493     <span class="d_keyword">int</span> val;
 1494     <span class="d_keyword">alias</span> val <span class="d_keyword">this</span>;
 1495 }
 1496 
 1497 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isIntegral</span>!S);
 1498 </pre>
 1499 </div></div>
 1500 
 1501 </dd>
 1502 <dt class="d_decl"><div ><span class="def-anchor" id=".isFloatingPoint"></span><div class="quickindex" id="quickindex.isFloatingPoint"></div>enum bool <span class="def-anchor" id="isFloatingPoint"></span><code class="ddoc_psymbol">isFloatingPoint</code>(T);
 1503 <br></div></dt>
 1504 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a built-in floating point type.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1505     <span class="d_psymbol">isFloatingPoint</span>!<span class="d_keyword">float</span> &amp;&amp;
 1506     <span class="d_psymbol">isFloatingPoint</span>!<span class="d_keyword">double</span> &amp;&amp;
 1507     <span class="d_psymbol">isFloatingPoint</span>!<span class="d_keyword">real</span> &amp;&amp;
 1508     <span class="d_psymbol">isFloatingPoint</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">real</span>)) &amp;&amp;
 1509     <span class="d_psymbol">isFloatingPoint</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">real</span>))
 1510 );
 1511 
 1512 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isFloatingPoint</span>!<span class="d_keyword">int</span>);
 1513 
 1514 <span class="d_comment">// complex and imaginary numbers do not pass
 1515 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1516     !<span class="d_psymbol">isFloatingPoint</span>!<span class="d_keyword">cfloat</span> &amp;&amp;
 1517     !<span class="d_psymbol">isFloatingPoint</span>!<span class="d_keyword">ifloat</span>
 1518 );
 1519 
 1520 <span class="d_comment">// types which act as floating point values do not pass
 1521 </span><span class="d_keyword">struct</span> S
 1522 {
 1523     <span class="d_keyword">float</span> val;
 1524     <span class="d_keyword">alias</span> val <span class="d_keyword">this</span>;
 1525 }
 1526 
 1527 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isFloatingPoint</span>!S);
 1528 </pre>
 1529 </div></div>
 1530 
 1531 </dd>
 1532 <dt class="d_decl"><div ><span class="def-anchor" id=".isNumeric"></span><div class="quickindex" id="quickindex.isNumeric"></div>enum bool <span class="def-anchor" id="isNumeric"></span><code class="ddoc_psymbol">isNumeric</code>(T);
 1533 <br></div></dt>
 1534 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a built-in numeric type (integral or floating
 1535  point).</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1536     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">byte</span> &amp;&amp;
 1537     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">short</span> &amp;&amp;
 1538     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">int</span> &amp;&amp;
 1539     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">long</span> &amp;&amp;
 1540     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">float</span> &amp;&amp;
 1541     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">double</span> &amp;&amp;
 1542     <span class="d_psymbol">isNumeric</span>!<span class="d_keyword">real</span> &amp;&amp;
 1543     <span class="d_psymbol">isNumeric</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">real</span>)) &amp;&amp;
 1544     <span class="d_psymbol">isNumeric</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">real</span>))
 1545 );
 1546 
 1547 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1548     !<span class="d_psymbol">isNumeric</span>!<span class="d_keyword">void</span> &amp;&amp;
 1549     !<span class="d_psymbol">isNumeric</span>!<span class="d_keyword">bool</span> &amp;&amp;
 1550     !<span class="d_psymbol">isNumeric</span>!<span class="d_keyword">char</span> &amp;&amp;
 1551     !<span class="d_psymbol">isNumeric</span>!<span class="d_keyword">wchar</span> &amp;&amp;
 1552     !<span class="d_psymbol">isNumeric</span>!<span class="d_keyword">dchar</span>
 1553 );
 1554 
 1555 <span class="d_comment">// types which act as numeric values do not pass
 1556 </span><span class="d_keyword">struct</span> S
 1557 {
 1558     <span class="d_keyword">int</span> val;
 1559     <span class="d_keyword">alias</span> val <span class="d_keyword">this</span>;
 1560 }
 1561 
 1562 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!isIntegral!S);
 1563 </pre>
 1564 </div></div>
 1565 
 1566 </dd>
 1567 <dt class="d_decl"><div ><span class="def-anchor" id=".isScalarType"></span><div class="quickindex" id="quickindex.isScalarType"></div>enum bool <span class="def-anchor" id="isScalarType"></span><code class="ddoc_psymbol">isScalarType</code>(T);
 1568 <br></div></dt>
 1569 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a scalar type (a built-in numeric, character or
 1570  boolean type).</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(!<span class="d_psymbol">isScalarType</span>!<span class="d_keyword">void</span>);
 1571 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">byte</span>)));
 1572 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">ushort</span>)));
 1573 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">int</span>)));
 1574 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">ulong</span>));
 1575 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">shared</span>(<span class="d_keyword">float</span>)));
 1576 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">shared</span>(<span class="d_keyword">const</span> <span class="d_keyword">bool</span>)));
 1577 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">char</span>)));
 1578 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">wchar</span>));
 1579 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">dchar</span>)));
 1580 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">double</span>)));
 1581 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isScalarType</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">real</span>)));
 1582 </pre>
 1583 </div></div>
 1584 
 1585 </dd>
 1586 <dt class="d_decl"><div ><span class="def-anchor" id=".isBasicType"></span><div class="quickindex" id="quickindex.isBasicType"></div>enum bool <span class="def-anchor" id="isBasicType"></span><code class="ddoc_psymbol">isBasicType</code>(T);
 1587 <br></div></dt>
 1588 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a basic type (scalar type or void).</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!<span class="d_keyword">void</span>);
 1589 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">void</span>)));
 1590 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">shared</span>(<span class="d_keyword">void</span>)));
 1591 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">void</span>)));
 1592 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">const</span>(<span class="d_keyword">void</span>)));
 1593 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">inout</span>(<span class="d_keyword">void</span>)));
 1594 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">shared</span> <span class="d_keyword">inout</span> <span class="d_keyword">const</span>(<span class="d_keyword">void</span>)));
 1595 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">inout</span>(<span class="d_keyword">void</span>)));
 1596 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">inout</span> <span class="d_keyword">const</span>(<span class="d_keyword">void</span>)));
 1597 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">immutable</span>(<span class="d_keyword">int</span>)));
 1598 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">shared</span>(<span class="d_keyword">float</span>)));
 1599 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">shared</span>(<span class="d_keyword">const</span> <span class="d_keyword">bool</span>)));
 1600 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(<span class="d_psymbol">isBasicType</span>!(<span class="d_keyword">const</span>(<span class="d_keyword">dchar</span>)));
 1601 </pre>
 1602 </div></div>
 1603 
 1604 </dd>
 1605 <dt class="d_decl"><div ><span class="def-anchor" id=".isUnsigned"></span><div class="quickindex" id="quickindex.isUnsigned"></div>enum bool <span class="def-anchor" id="isUnsigned"></span><code class="ddoc_psymbol">isUnsigned</code>(T);
 1606 <br></div></dt>
 1607 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a built-in unsigned numeric type.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1608     <span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">uint</span> &amp;&amp;
 1609     <span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">ulong</span>
 1610 );
 1611 
 1612 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1613     !<span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">char</span> &amp;&amp;
 1614     !<span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">int</span> &amp;&amp;
 1615     !<span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">long</span> &amp;&amp;
 1616     !<span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">char</span> &amp;&amp;
 1617     !<span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">wchar</span> &amp;&amp;
 1618     !<span class="d_psymbol">isUnsigned</span>!<span class="d_keyword">dchar</span>
 1619 );
 1620 </pre>
 1621 </div></div>
 1622 
 1623 </dd>
 1624 <dt class="d_decl"><div ><span class="def-anchor" id=".isSigned"></span><div class="quickindex" id="quickindex.isSigned"></div>enum bool <span class="def-anchor" id="isSigned"></span><code class="ddoc_psymbol">isSigned</code>(T);
 1625 <br></div></dt>
 1626 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is a built-in signed numeric type.</div><span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1627     <span class="d_psymbol">isSigned</span>!<span class="d_keyword">int</span> &amp;&amp;
 1628     <span class="d_psymbol">isSigned</span>!<span class="d_keyword">long</span>
 1629 );
 1630 
 1631 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>(
 1632     !<span class="d_psymbol">isSigned</span>!<span class="d_keyword">uint</span> &amp;&amp;
 1633     !<span class="d_psymbol">isSigned</span>!<span class="d_keyword">ulong</span>
 1634 );
 1635 </pre>
 1636 </div></div>
 1637 
 1638 </dd>
 1639 <dt class="d_decl"><div ><span class="def-anchor" id=".isSomeChar"></span><div class="quickindex" id="quickindex.isSomeChar"></div>enum bool <span class="def-anchor" id="isSomeChar"></span><code class="ddoc_psymbol">isSomeChar</code>(T);
 1640 <br></div></dt>
 1641 <dd><div class="summary">Detect whether <span class="d_inlinecode donthyphenate notranslate">T</span> is one of the built-in character types.
 1642 </div><div class="description">The built-in char types are any of <span class="d_inlinecode donthyphenate notranslate">char</span>, <span class="d_inlinecode donthyphenate notranslate">wchar</span> or <span class="d_inlinecode donthyphenate notranslate">dchar</span>, with
 1643  or without qualifiers.</div>
 1644 <span class="dlang_runnable"></span><div class="keyval Examples"><span class="key keyExamples">Examples:</span> <div class="val valExamples"><pre class="d_code notranslate"><span class="d_comment">//Char types
 1645 </span><span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isSomeChar</span>!<span class="d_keyword">char</span>);
 1646 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isSomeChar</span>!<span class="d_keyword">wchar</span>);
 1647 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isSomeChar</span>!<span class="d_keyword">dchar</span>);
 1648 <span class="d_keyword">static</span> <span class="d_keyword">assert</span>( <span class="d_psymbol">isSomeChar</span>!(<span class="d_keyword">typeof</span>('c')));
 1649 <span class=&qu