[www-releases] r238136 - Add clang docs for 3.6.1

Tom Stellard thomas.stellard at amd.com
Mon May 25 06:58:02 PDT 2015


Added: www-releases/trunk/3.6.1/tools/clang/docs/LanguageExtensions.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.6.1/tools/clang/docs/LanguageExtensions.html?rev=238136&view=auto
==============================================================================
--- www-releases/trunk/3.6.1/tools/clang/docs/LanguageExtensions.html (added)
+++ www-releases/trunk/3.6.1/tools/clang/docs/LanguageExtensions.html Mon May 25 08:58:01 2015
@@ -0,0 +1,1856 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Clang Language Extensions — Clang 3.6 documentation</title>
+    
+    <link rel="stylesheet" href="_static/haiku.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    <link rel="stylesheet" href="_static/print.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '',
+        VERSION:     '3.6',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+    <script type="text/javascript" src="_static/theme_extras.js"></script>
+    <link rel="top" title="Clang 3.6 documentation" href="index.html" />
+    <link rel="next" title="Objective-C Literals" href="ObjectiveCLiterals.html" />
+    <link rel="prev" title="Clang Compiler User’s Manual" href="UsersManual.html" /> 
+  </head>
+  <body>
+      <div class="header"><h1 class="heading"><a href="index.html">
+          <span>Clang 3.6 documentation</span></a></h1>
+        <h2 class="heading"><span>Clang Language Extensions</span></h2>
+      </div>
+      <div class="topnav">
+      
+        <p>
+        «  <a href="UsersManual.html">Clang Compiler User’s Manual</a>
+          ::  
+        <a class="uplink" href="index.html">Contents</a>
+          ::  
+        <a href="ObjectiveCLiterals.html">Objective-C Literals</a>  Â»
+        </p>
+
+      </div>
+      <div class="content">
+        
+        
+  <div class="section" id="clang-language-extensions">
+<h1>Clang Language Extensions<a class="headerlink" href="#clang-language-extensions" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li>
+<li><a class="reference internal" href="#feature-checking-macros" id="id2">Feature Checking Macros</a></li>
+<li><a class="reference internal" href="#include-file-checking-macros" id="id3">Include File Checking Macros</a></li>
+<li><a class="reference internal" href="#builtin-macros" id="id4">Builtin Macros</a></li>
+<li><a class="reference internal" href="#vectors-and-extended-vectors" id="id5">Vectors and Extended Vectors</a></li>
+<li><a class="reference internal" href="#messages-on-deprecated-and-unavailable-attributes" id="id6">Messages on <tt class="docutils literal"><span class="pre">deprecated</span></tt> and <tt class="docutils literal"><span class="pre">unavailable</span></tt> Attributes</a></li>
+<li><a class="reference internal" href="#attributes-on-enumerators" id="id7">Attributes on Enumerators</a></li>
+<li><a class="reference internal" href="#user-specified-system-frameworks" id="id8">‘User-Specified’ System Frameworks</a></li>
+<li><a class="reference internal" href="#checks-for-standard-language-features" id="id9">Checks for Standard Language Features</a></li>
+<li><a class="reference internal" href="#checks-for-type-trait-primitives" id="id10">Checks for Type Trait Primitives</a></li>
+<li><a class="reference internal" href="#blocks" id="id11">Blocks</a></li>
+<li><a class="reference internal" href="#objective-c-features" id="id12">Objective-C Features</a></li>
+<li><a class="reference internal" href="#initializer-lists-for-complex-numbers-in-c" id="id13">Initializer lists for complex numbers in C</a></li>
+<li><a class="reference internal" href="#builtin-functions" id="id14">Builtin Functions</a></li>
+<li><a class="reference internal" href="#non-standard-c-11-attributes" id="id15">Non-standard C++11 Attributes</a></li>
+<li><a class="reference internal" href="#target-specific-extensions" id="id16">Target-Specific Extensions</a></li>
+<li><a class="reference internal" href="#extensions-for-static-analysis" id="id17">Extensions for Static Analysis</a></li>
+<li><a class="reference internal" href="#extensions-for-dynamic-analysis" id="id18">Extensions for Dynamic Analysis</a></li>
+<li><a class="reference internal" href="#extensions-for-selectively-disabling-optimization" id="id19">Extensions for selectively disabling optimization</a></li>
+<li><a class="reference internal" href="#extensions-for-loop-hint-optimizations" id="id20">Extensions for loop hint optimizations</a></li>
+</ul>
+</div>
+<div class="toctree-wrapper compound">
+</div>
+<div class="section" id="introduction">
+<h2><a class="toc-backref" href="#id1">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
+<p>This document describes the language extensions provided by Clang.  In addition
+to the language extensions listed here, Clang aims to support a broad range of
+GCC extensions.  Please see the <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__gcc.gnu.org_onlinedocs_gcc_C-2DExtensions.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=6BKrhl1hYJjL1gleHsF8yZs9u-kiBzwS3cPkpM5zmck&e=">GCC manual</a> for more information on
+these extensions.</p>
+</div>
+<div class="section" id="feature-checking-macros">
+<span id="langext-feature-check"></span><h2><a class="toc-backref" href="#id2">Feature Checking Macros</a><a class="headerlink" href="#feature-checking-macros" title="Permalink to this headline">¶</a></h2>
+<p>Language extensions can be very useful, but only if you know you can depend on
+them.  In order to allow fine-grain features checks, we support three builtin
+function-like macros.  This allows you to directly test for a feature in your
+code without having to resort to something like autoconf or fragile “compiler
+version checks”.</p>
+<div class="section" id="has-builtin">
+<h3><tt class="docutils literal"><span class="pre">__has_builtin</span></tt><a class="headerlink" href="#has-builtin" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single identifier argument that is the name of
+a builtin function.  It evaluates to 1 if the builtin is supported or 0 if not.
+It can be used like this:</p>
+<div class="highlight-c++"><pre>#ifndef __has_builtin         // Optional of course.
+  #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
+#endif
+
+...
+#if __has_builtin(__builtin_trap)
+  __builtin_trap();
+#else
+  abort();
+#endif
+...</pre>
+</div>
+</div>
+<div class="section" id="has-feature-and-has-extension">
+<span id="langext-has-feature-has-extension"></span><h3><tt class="docutils literal"><span class="pre">__has_feature</span></tt> and <tt class="docutils literal"><span class="pre">__has_extension</span></tt><a class="headerlink" href="#has-feature-and-has-extension" title="Permalink to this headline">¶</a></h3>
+<p>These function-like macros take a single identifier argument that is the name
+of a feature.  <tt class="docutils literal"><span class="pre">__has_feature</span></tt> evaluates to 1 if the feature is both
+supported by Clang and standardized in the current language standard or 0 if
+not (but see <a class="reference internal" href="#langext-has-feature-back-compat"><em>below</em></a>), while
+<tt class="docutils literal"><span class="pre">__has_extension</span></tt> evaluates to 1 if the feature is supported by Clang in the
+current language (either as a language extension or a standard language
+feature) or 0 if not.  They can be used like this:</p>
+<div class="highlight-c++"><pre>#ifndef __has_feature         // Optional of course.
+  #define __has_feature(x) 0  // Compatibility with non-clang compilers.
+#endif
+#ifndef __has_extension
+  #define __has_extension __has_feature // Compatibility with pre-3.0 compilers.
+#endif
+
+...
+#if __has_feature(cxx_rvalue_references)
+// This code will only be compiled with the -std=c++11 and -std=gnu++11
+// options, because rvalue references are only standardized in C++11.
+#endif
+
+#if __has_extension(cxx_rvalue_references)
+// This code will be compiled with the -std=c++11, -std=gnu++11, -std=c++98
+// and -std=gnu++98 options, because rvalue references are supported as a
+// language extension in C++98.
+#endif</pre>
+</div>
+<p id="langext-has-feature-back-compat">For backward compatibility, <tt class="docutils literal"><span class="pre">__has_feature</span></tt> can also be used to test
+for support for non-standardized features, i.e. features not prefixed <tt class="docutils literal"><span class="pre">c_</span></tt>,
+<tt class="docutils literal"><span class="pre">cxx_</span></tt> or <tt class="docutils literal"><span class="pre">objc_</span></tt>.</p>
+<p>Another use of <tt class="docutils literal"><span class="pre">__has_feature</span></tt> is to check for compiler features not related
+to the language standard, such as e.g. <a class="reference internal" href="AddressSanitizer.html"><em>AddressSanitizer</em></a>.</p>
+<p>If the <tt class="docutils literal"><span class="pre">-pedantic-errors</span></tt> option is given, <tt class="docutils literal"><span class="pre">__has_extension</span></tt> is equivalent
+to <tt class="docutils literal"><span class="pre">__has_feature</span></tt>.</p>
+<p>The feature tag is described along with the language feature below.</p>
+<p>The feature name or extension name can also be specified with a preceding and
+following <tt class="docutils literal"><span class="pre">__</span></tt> (double underscore) to avoid interference from a macro with
+the same name.  For instance, <tt class="docutils literal"><span class="pre">__cxx_rvalue_references__</span></tt> can be used instead
+of <tt class="docutils literal"><span class="pre">cxx_rvalue_references</span></tt>.</p>
+</div>
+<div class="section" id="has-cpp-attribute">
+<h3><tt class="docutils literal"><span class="pre">__has_cpp_attribute</span></tt><a class="headerlink" href="#has-cpp-attribute" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single argument that is the name of a
+C++11-style attribute. The argument can either be a single identifier, or a
+scoped identifier. If the attribute is supported, a nonzero value is returned.
+If the attribute is a standards-based attribute, this macro returns a nonzero
+value based on the year and month in which the attribute was voted into the
+working draft. If the attribute is not supported by the current compliation
+target, this macro evaluates to 0.  It can be used like this:</p>
+<div class="highlight-c++"><pre>#ifndef __has_cpp_attribute         // Optional of course.
+  #define __has_cpp_attribute(x) 0  // Compatibility with non-clang compilers.
+#endif
+
+...
+#if __has_cpp_attribute(clang::fallthrough)
+#define FALLTHROUGH [[clang::fallthrough]]
+#else
+#define FALLTHROUGH
+#endif
+...</pre>
+</div>
+<p>The attribute identifier (but not scope) can also be specified with a preceding
+and following <tt class="docutils literal"><span class="pre">__</span></tt> (double underscore) to avoid interference from a macro with
+the same name.  For instance, <tt class="docutils literal"><span class="pre">gnu::__const__</span></tt> can be used instead of
+<tt class="docutils literal"><span class="pre">gnu::const</span></tt>.</p>
+</div>
+<div class="section" id="has-attribute">
+<h3><tt class="docutils literal"><span class="pre">__has_attribute</span></tt><a class="headerlink" href="#has-attribute" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single identifier argument that is the name of
+a GNU-style attribute.  It evaluates to 1 if the attribute is supported by the
+current compilation target, or 0 if not.  It can be used like this:</p>
+<div class="highlight-c++"><pre>#ifndef __has_attribute         // Optional of course.
+  #define __has_attribute(x) 0  // Compatibility with non-clang compilers.
+#endif
+
+...
+#if __has_attribute(always_inline)
+#define ALWAYS_INLINE __attribute__((always_inline))
+#else
+#define ALWAYS_INLINE
+#endif
+...</pre>
+</div>
+<p>The attribute name can also be specified with a preceding and following <tt class="docutils literal"><span class="pre">__</span></tt>
+(double underscore) to avoid interference from a macro with the same name.  For
+instance, <tt class="docutils literal"><span class="pre">__always_inline__</span></tt> can be used instead of <tt class="docutils literal"><span class="pre">always_inline</span></tt>.</p>
+</div>
+<div class="section" id="has-declspec-attribute">
+<h3><tt class="docutils literal"><span class="pre">__has_declspec_attribute</span></tt><a class="headerlink" href="#has-declspec-attribute" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single identifier argument that is the name of
+an attribute implemented as a Microsoft-style <tt class="docutils literal"><span class="pre">__declspec</span></tt> attribute.  It
+evaluates to 1 if the attribute is supported by the current compilation target,
+or 0 if not.  It can be used like this:</p>
+<div class="highlight-c++"><pre>#ifndef __has_declspec_attribute         // Optional of course.
+  #define __has_declspec_attribute(x) 0  // Compatibility with non-clang compilers.
+#endif
+
+...
+#if __has_declspec_attribute(dllexport)
+#define DLLEXPORT __declspec(dllexport)
+#else
+#define DLLEXPORT
+#endif
+...</pre>
+</div>
+<p>The attribute name can also be specified with a preceding and following <tt class="docutils literal"><span class="pre">__</span></tt>
+(double underscore) to avoid interference from a macro with the same name.  For
+instance, <tt class="docutils literal"><span class="pre">__dllexport__</span></tt> can be used instead of <tt class="docutils literal"><span class="pre">dllexport</span></tt>.</p>
+</div>
+<div class="section" id="is-identifier">
+<h3><tt class="docutils literal"><span class="pre">__is_identifier</span></tt><a class="headerlink" href="#is-identifier" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single identifier argument that might be either
+a reserved word or a regular identifier. It evaluates to 1 if the argument is just
+a regular identifier and not a reserved word, in the sense that it can then be
+used as the name of a user-defined function or variable. Otherwise it evaluates
+to 0.  It can be used like this:</p>
+<div class="highlight-c++"><pre>...
+#ifdef __is_identifier          // Compatibility with non-clang compilers.
+  #if __is_identifier(__wchar_t)
+    typedef wchar_t __wchar_t;
+  #endif
+#endif
+
+__wchar_t WideCharacter;
+...</pre>
+</div>
+</div>
+</div>
+<div class="section" id="include-file-checking-macros">
+<h2><a class="toc-backref" href="#id3">Include File Checking Macros</a><a class="headerlink" href="#include-file-checking-macros" title="Permalink to this headline">¶</a></h2>
+<p>Not all developments systems have the same include files.  The
+<a class="reference internal" href="#langext-has-include"><em>__has_include</em></a> and <a class="reference internal" href="#langext-has-include-next"><em>__has_include_next</em></a> macros allow
+you to check for the existence of an include file before doing a possibly
+failing <tt class="docutils literal"><span class="pre">#include</span></tt> directive.  Include file checking macros must be used
+as expressions in <tt class="docutils literal"><span class="pre">#if</span></tt> or <tt class="docutils literal"><span class="pre">#elif</span></tt> preprocessing directives.</p>
+<div class="section" id="has-include">
+<span id="langext-has-include"></span><h3><tt class="docutils literal"><span class="pre">__has_include</span></tt><a class="headerlink" href="#has-include" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single file name string argument that is the
+name of an include file.  It evaluates to 1 if the file can be found using the
+include paths, or 0 otherwise:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// Note the two possible file name string formats.</span>
+<span class="cp">#if __has_include("myinclude.h") && __has_include(<stdint.h>)</span>
+<span class="cp"># include "myinclude.h"</span>
+<span class="cp">#endif</span>
+</pre></div>
+</div>
+<p>To test for this feature, use <tt class="docutils literal"><span class="pre">#if</span> <span class="pre">defined(__has_include)</span></tt>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// To avoid problem with non-clang compilers not having this macro.</span>
+<span class="cp">#if defined(__has_include)</span>
+<span class="cp">#if __has_include("myinclude.h")</span>
+<span class="cp"># include "myinclude.h"</span>
+<span class="cp">#endif</span>
+<span class="cp">#endif</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="has-include-next">
+<span id="langext-has-include-next"></span><h3><tt class="docutils literal"><span class="pre">__has_include_next</span></tt><a class="headerlink" href="#has-include-next" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a single file name string argument that is the
+name of an include file.  It is like <tt class="docutils literal"><span class="pre">__has_include</span></tt> except that it looks for
+the second instance of the given file found in the include paths.  It evaluates
+to 1 if the second instance of the file can be found using the include paths,
+or 0 otherwise:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// Note the two possible file name string formats.</span>
+<span class="cp">#if __has_include_next("myinclude.h") && __has_include_next(<stdint.h>)</span>
+<span class="cp"># include_next "myinclude.h"</span>
+<span class="cp">#endif</span>
+
+<span class="c1">// To avoid problem with non-clang compilers not having this macro.</span>
+<span class="cp">#if defined(__has_include_next)</span>
+<span class="cp">#if __has_include_next("myinclude.h")</span>
+<span class="cp"># include_next "myinclude.h"</span>
+<span class="cp">#endif</span>
+<span class="cp">#endif</span>
+</pre></div>
+</div>
+<p>Note that <tt class="docutils literal"><span class="pre">__has_include_next</span></tt>, like the GNU extension <tt class="docutils literal"><span class="pre">#include_next</span></tt>
+directive, is intended for use in headers only, and will issue a warning if
+used in the top-level compilation file.  A warning will also be issued if an
+absolute path is used in the file argument.</p>
+</div>
+<div class="section" id="has-warning">
+<h3><tt class="docutils literal"><span class="pre">__has_warning</span></tt><a class="headerlink" href="#has-warning" title="Permalink to this headline">¶</a></h3>
+<p>This function-like macro takes a string literal that represents a command line
+option for a warning and returns true if that is a valid warning option.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#if __has_warning("-Wformat")</span>
+<span class="p">...</span>
+<span class="cp">#endif</span>
+</pre></div>
+</div>
+</div>
+</div>
+<div class="section" id="builtin-macros">
+<h2><a class="toc-backref" href="#id4">Builtin Macros</a><a class="headerlink" href="#builtin-macros" title="Permalink to this headline">¶</a></h2>
+<dl class="docutils">
+<dt><tt class="docutils literal"><span class="pre">__BASE_FILE__</span></tt></dt>
+<dd>Defined to a string that contains the name of the main input file passed to
+Clang.</dd>
+<dt><tt class="docutils literal"><span class="pre">__COUNTER__</span></tt></dt>
+<dd>Defined to an integer value that starts at zero and is incremented each time
+the <tt class="docutils literal"><span class="pre">__COUNTER__</span></tt> macro is expanded.</dd>
+<dt><tt class="docutils literal"><span class="pre">__INCLUDE_LEVEL__</span></tt></dt>
+<dd>Defined to an integral value that is the include depth of the file currently
+being translated.  For the main file, this value is zero.</dd>
+<dt><tt class="docutils literal"><span class="pre">__TIMESTAMP__</span></tt></dt>
+<dd>Defined to the date and time of the last modification of the current source
+file.</dd>
+<dt><tt class="docutils literal"><span class="pre">__clang__</span></tt></dt>
+<dd>Defined when compiling with Clang</dd>
+<dt><tt class="docutils literal"><span class="pre">__clang_major__</span></tt></dt>
+<dd>Defined to the major marketing version number of Clang (e.g., the 2 in
+2.0.1).  Note that marketing version numbers should not be used to check for
+language features, as different vendors use different numbering schemes.
+Instead, use the <a class="reference internal" href="#langext-feature-check"><em>Feature Checking Macros</em></a>.</dd>
+<dt><tt class="docutils literal"><span class="pre">__clang_minor__</span></tt></dt>
+<dd>Defined to the minor version number of Clang (e.g., the 0 in 2.0.1).  Note
+that marketing version numbers should not be used to check for language
+features, as different vendors use different numbering schemes.  Instead, use
+the <a class="reference internal" href="#langext-feature-check"><em>Feature Checking Macros</em></a>.</dd>
+<dt><tt class="docutils literal"><span class="pre">__clang_patchlevel__</span></tt></dt>
+<dd>Defined to the marketing patch level of Clang (e.g., the 1 in 2.0.1).</dd>
+<dt><tt class="docutils literal"><span class="pre">__clang_version__</span></tt></dt>
+<dd>Defined to a string that captures the Clang marketing version, including the
+Subversion tag or revision number, e.g., “<tt class="docutils literal"><span class="pre">1.5</span> <span class="pre">(trunk</span> <span class="pre">102332)</span></tt>”.</dd>
+</dl>
+</div>
+<div class="section" id="vectors-and-extended-vectors">
+<span id="langext-vectors"></span><h2><a class="toc-backref" href="#id5">Vectors and Extended Vectors</a><a class="headerlink" href="#vectors-and-extended-vectors" title="Permalink to this headline">¶</a></h2>
+<p>Supports the GCC, OpenCL, AltiVec and NEON vector extensions.</p>
+<p>OpenCL vector types are created using <tt class="docutils literal"><span class="pre">ext_vector_type</span></tt> attribute.  It
+support for <tt class="docutils literal"><span class="pre">V.xyzw</span></tt> syntax and other tidbits as seen in OpenCL.  An example
+is:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">typedef</span> <span class="kt">float</span> <span class="n">float4</span> <span class="nf">__attribute__</span><span class="p">((</span><span class="n">ext_vector_type</span><span class="p">(</span><span class="mi">4</span><span class="p">)));</span>
+<span class="k">typedef</span> <span class="kt">float</span> <span class="n">float2</span> <span class="nf">__attribute__</span><span class="p">((</span><span class="n">ext_vector_type</span><span class="p">(</span><span class="mi">2</span><span class="p">)));</span>
+
+<span class="n">float4</span> <span class="nf">foo</span><span class="p">(</span><span class="n">float2</span> <span class="n">a</span><span class="p">,</span> <span class="n">float2</span> <span class="n">b</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">float4</span> <span class="n">c</span><span class="p">;</span>
+  <span class="n">c</span><span class="p">.</span><span class="n">xz</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span>
+  <span class="n">c</span><span class="p">.</span><span class="n">yw</span> <span class="o">=</span> <span class="n">b</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">c</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_extension(attribute_ext_vector_type)</span></tt>.</p>
+<p>Giving <tt class="docutils literal"><span class="pre">-faltivec</span></tt> option to clang enables support for AltiVec vector syntax
+and functions.  For example:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">vector</span> <span class="kt">float</span> <span class="nf">foo</span><span class="p">(</span><span class="n">vector</span> <span class="kt">int</span> <span class="n">a</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">vector</span> <span class="kt">int</span> <span class="n">b</span><span class="p">;</span>
+  <span class="n">b</span> <span class="o">=</span> <span class="n">vec_add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span> <span class="o">+</span> <span class="n">a</span><span class="p">;</span>
+  <span class="k">return</span> <span class="p">(</span><span class="n">vector</span> <span class="kt">float</span><span class="p">)</span><span class="n">b</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>NEON vector types are created using <tt class="docutils literal"><span class="pre">neon_vector_type</span></tt> and
+<tt class="docutils literal"><span class="pre">neon_polyvector_type</span></tt> attributes.  For example:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">typedef</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">neon_vector_type</span><span class="p">(</span><span class="mi">8</span><span class="p">)))</span> <span class="kt">int8_t</span> <span class="kt">int8x8_t</span><span class="p">;</span>
+<span class="k">typedef</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">neon_polyvector_type</span><span class="p">(</span><span class="mi">16</span><span class="p">)))</span> <span class="kt">poly8_t</span> <span class="kt">poly8x16_t</span><span class="p">;</span>
+
+<span class="kt">int8x8_t</span> <span class="nf">foo</span><span class="p">(</span><span class="kt">int8x8_t</span> <span class="n">a</span><span class="p">)</span> <span class="p">{</span>
+  <span class="kt">int8x8_t</span> <span class="n">v</span><span class="p">;</span>
+  <span class="n">v</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span>
+  <span class="k">return</span> <span class="n">v</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<div class="section" id="vector-literals">
+<h3>Vector Literals<a class="headerlink" href="#vector-literals" title="Permalink to this headline">¶</a></h3>
+<p>Vector literals can be used to create vectors from a set of scalars, or
+vectors.  Either parentheses or braces form can be used.  In the parentheses
+form the number of literal values specified must be one, i.e. referring to a
+scalar value, or must match the size of the vector type being created.  If a
+single scalar literal value is specified, the scalar literal value will be
+replicated to all the components of the vector type.  In the brackets form any
+number of literals can be specified.  For example:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">typedef</span> <span class="kt">int</span> <span class="n">v4si</span> <span class="nf">__attribute__</span><span class="p">((</span><span class="n">__vector_size__</span><span class="p">(</span><span class="mi">16</span><span class="p">)));</span>
+<span class="k">typedef</span> <span class="kt">float</span> <span class="n">float4</span> <span class="nf">__attribute__</span><span class="p">((</span><span class="n">ext_vector_type</span><span class="p">(</span><span class="mi">4</span><span class="p">)));</span>
+<span class="k">typedef</span> <span class="kt">float</span> <span class="n">float2</span> <span class="nf">__attribute__</span><span class="p">((</span><span class="n">ext_vector_type</span><span class="p">(</span><span class="mi">2</span><span class="p">)));</span>
+
+<span class="n">v4si</span> <span class="n">vsi</span> <span class="o">=</span> <span class="p">(</span><span class="n">v4si</span><span class="p">){</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">};</span>
+<span class="n">float4</span> <span class="n">vf</span> <span class="o">=</span> <span class="p">(</span><span class="n">float4</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">,</span> <span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">);</span>
+<span class="n">vector</span> <span class="kt">int</span> <span class="n">vi1</span> <span class="o">=</span> <span class="p">(</span><span class="n">vector</span> <span class="kt">int</span><span class="p">)(</span><span class="mi">1</span><span class="p">);</span>    <span class="c1">// vi1 will be (1, 1, 1, 1).</span>
+<span class="n">vector</span> <span class="kt">int</span> <span class="n">vi2</span> <span class="o">=</span> <span class="p">(</span><span class="n">vector</span> <span class="kt">int</span><span class="p">){</span><span class="mi">1</span><span class="p">};</span>    <span class="c1">// vi2 will be (1, 0, 0, 0).</span>
+<span class="n">vector</span> <span class="kt">int</span> <span class="n">vi3</span> <span class="o">=</span> <span class="p">(</span><span class="n">vector</span> <span class="kt">int</span><span class="p">)(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> <span class="c1">// error</span>
+<span class="n">vector</span> <span class="kt">int</span> <span class="n">vi4</span> <span class="o">=</span> <span class="p">(</span><span class="n">vector</span> <span class="kt">int</span><span class="p">){</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">};</span> <span class="c1">// vi4 will be (1, 2, 0, 0).</span>
+<span class="n">vector</span> <span class="kt">int</span> <span class="n">vi5</span> <span class="o">=</span> <span class="p">(</span><span class="n">vector</span> <span class="kt">int</span><span class="p">)(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span>
+<span class="n">float4</span> <span class="n">vf</span> <span class="o">=</span> <span class="p">(</span><span class="n">float4</span><span class="p">)((</span><span class="n">float2</span><span class="p">)(</span><span class="mf">1.0f</span><span class="p">,</span> <span class="mf">2.0f</span><span class="p">),</span> <span class="p">(</span><span class="n">float2</span><span class="p">)(</span><span class="mf">3.0f</span><span class="p">,</span> <span class="mf">4.0f</span><span class="p">));</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="vector-operations">
+<h3>Vector Operations<a class="headerlink" href="#vector-operations" title="Permalink to this headline">¶</a></h3>
+<p>The table below shows the support for each operation by vector extension.  A
+dash indicates that an operation is not accepted according to a corresponding
+specification.</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="52%" />
+<col width="12%" />
+<col width="12%" />
+<col width="12%" />
+<col width="12%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Opeator</th>
+<th class="head">OpenCL</th>
+<th class="head">AltiVec</th>
+<th class="head">GCC</th>
+<th class="head">NEON</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>[]</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+</tr>
+<tr class="row-odd"><td>unary operators +, –</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+</tr>
+<tr class="row-even"><td>++, – –</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+</tr>
+<tr class="row-odd"><td>+,–,*,/,%</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+</tr>
+<tr class="row-even"><td>bitwise operators &,|,^,~</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+</tr>
+<tr class="row-odd"><td>>>,<<</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+</tr>
+<tr class="row-even"><td>!, &&, ||</td>
+<td>yes</td>
+<td>–</td>
+<td>–</td>
+<td>–</td>
+</tr>
+<tr class="row-odd"><td>==, !=, >, <, >=, <=</td>
+<td>yes</td>
+<td>yes</td>
+<td>–</td>
+<td>–</td>
+</tr>
+<tr class="row-even"><td>=</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr class="row-odd"><td>:?</td>
+<td>yes</td>
+<td>–</td>
+<td>–</td>
+<td>–</td>
+</tr>
+<tr class="row-even"><td>sizeof</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr class="row-odd"><td>C-style cast</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+</tr>
+<tr class="row-even"><td>reinterpret_cast</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>no</td>
+</tr>
+<tr class="row-odd"><td>static_cast</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>no</td>
+</tr>
+<tr class="row-even"><td>const_cast</td>
+<td>no</td>
+<td>no</td>
+<td>no</td>
+<td>no</td>
+</tr>
+</tbody>
+</table>
+<p>See also <a class="reference internal" href="#langext-builtin-shufflevector"><em>__builtin_shufflevector</em></a>, <a class="reference internal" href="#langext-builtin-convertvector"><em>__builtin_convertvector</em></a>.</p>
+</div>
+</div>
+<div class="section" id="messages-on-deprecated-and-unavailable-attributes">
+<h2><a class="toc-backref" href="#id6">Messages on <tt class="docutils literal"><span class="pre">deprecated</span></tt> and <tt class="docutils literal"><span class="pre">unavailable</span></tt> Attributes</a><a class="headerlink" href="#messages-on-deprecated-and-unavailable-attributes" title="Permalink to this headline">¶</a></h2>
+<p>An optional string message can be added to the <tt class="docutils literal"><span class="pre">deprecated</span></tt> and
+<tt class="docutils literal"><span class="pre">unavailable</span></tt> attributes.  For example:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">explode</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">deprecated</span><span class="p">(</span><span class="s">"extremely unsafe, use 'combust' instead!!!"</span><span class="p">)));</span>
+</pre></div>
+</div>
+<p>If the deprecated or unavailable declaration is used, the message will be
+incorporated into the appropriate diagnostic:</p>
+<div class="highlight-c++"><pre>harmless.c:4:3: warning: 'explode' is deprecated: extremely unsafe, use 'combust' instead!!!
+      [-Wdeprecated-declarations]
+  explode();
+  ^</pre>
+</div>
+<p>Query for this feature with
+<tt class="docutils literal"><span class="pre">__has_extension(attribute_deprecated_with_message)</span></tt> and
+<tt class="docutils literal"><span class="pre">__has_extension(attribute_unavailable_with_message)</span></tt>.</p>
+</div>
+<div class="section" id="attributes-on-enumerators">
+<h2><a class="toc-backref" href="#id7">Attributes on Enumerators</a><a class="headerlink" href="#attributes-on-enumerators" title="Permalink to this headline">¶</a></h2>
+<p>Clang allows attributes to be written on individual enumerators.  This allows
+enumerators to be deprecated, made unavailable, etc.  The attribute must appear
+after the enumerator name and before any initializer, like so:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">enum</span> <span class="n">OperationMode</span> <span class="p">{</span>
+  <span class="n">OM_Invalid</span><span class="p">,</span>
+  <span class="n">OM_Normal</span><span class="p">,</span>
+  <span class="n">OM_Terrified</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">deprecated</span><span class="p">)),</span>
+  <span class="n">OM_AbortOnError</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">deprecated</span><span class="p">))</span> <span class="o">=</span> <span class="mi">4</span>
+<span class="p">};</span>
+</pre></div>
+</div>
+<p>Attributes on the <tt class="docutils literal"><span class="pre">enum</span></tt> declaration do not apply to individual enumerators.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_extension(enumerator_attributes)</span></tt>.</p>
+</div>
+<div class="section" id="user-specified-system-frameworks">
+<h2><a class="toc-backref" href="#id8">‘User-Specified’ System Frameworks</a><a class="headerlink" href="#user-specified-system-frameworks" title="Permalink to this headline">¶</a></h2>
+<p>Clang provides a mechanism by which frameworks can be built in such a way that
+they will always be treated as being “system frameworks”, even if they are not
+present in a system framework directory.  This can be useful to system
+framework developers who want to be able to test building other applications
+with development builds of their framework, including the manner in which the
+compiler changes warning behavior for system headers.</p>
+<p>Framework developers can opt-in to this mechanism by creating a
+“<tt class="docutils literal"><span class="pre">.system_framework</span></tt>” file at the top-level of their framework.  That is, the
+framework should have contents like:</p>
+<div class="highlight-none"><div class="highlight"><pre>.../TestFramework.framework
+.../TestFramework.framework/.system_framework
+.../TestFramework.framework/Headers
+.../TestFramework.framework/Headers/TestFramework.h
+...
+</pre></div>
+</div>
+<p>Clang will treat the presence of this file as an indicator that the framework
+should be treated as a system framework, regardless of how it was found in the
+framework search path.  For consistency, we recommend that such files never be
+included in installed versions of the framework.</p>
+</div>
+<div class="section" id="checks-for-standard-language-features">
+<h2><a class="toc-backref" href="#id9">Checks for Standard Language Features</a><a class="headerlink" href="#checks-for-standard-language-features" title="Permalink to this headline">¶</a></h2>
+<p>The <tt class="docutils literal"><span class="pre">__has_feature</span></tt> macro can be used to query if certain standard language
+features are enabled.  The <tt class="docutils literal"><span class="pre">__has_extension</span></tt> macro can be used to query if
+language features are available as an extension when compiling for a standard
+which does not provide them.  The features which can be tested are listed here.</p>
+<p>Since Clang 3.4, the C++ SD-6 feature test macros are also supported.
+These are macros with names of the form <tt class="docutils literal"><span class="pre">__cpp_<feature_name></span></tt>, and are
+intended to be a portable way to query the supported features of the compiler.
+See <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_cxx-5Fstatus.html-23ts&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=e_MHW873KFtZMbNAWeaKZXr8GGVIuPKhzXHpQtP_new&e=">the C++ status page</a> for
+information on the version of SD-6 supported by each Clang release, and the
+macros provided by that revision of the recommendations.</p>
+<div class="section" id="c-98">
+<h3>C++98<a class="headerlink" href="#c-98" title="Permalink to this headline">¶</a></h3>
+<p>The features listed below are part of the C++98 standard.  These features are
+enabled by default when compiling C++ code.</p>
+<div class="section" id="c-exceptions">
+<h4>C++ exceptions<a class="headerlink" href="#c-exceptions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_exceptions)</span></tt> to determine if C++ exceptions have been
+enabled.  For example, compiling code with <tt class="docutils literal"><span class="pre">-fno-exceptions</span></tt> disables C++
+exceptions.</p>
+</div>
+<div class="section" id="c-rtti">
+<h4>C++ RTTI<a class="headerlink" href="#c-rtti" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_rtti)</span></tt> to determine if C++ RTTI has been enabled.  For
+example, compiling code with <tt class="docutils literal"><span class="pre">-fno-rtti</span></tt> disables the use of RTTI.</p>
+</div>
+</div>
+<div class="section" id="c-11">
+<h3>C++11<a class="headerlink" href="#c-11" title="Permalink to this headline">¶</a></h3>
+<p>The features listed below are part of the C++11 standard.  As a result, all
+these features are enabled with the <tt class="docutils literal"><span class="pre">-std=c++11</span></tt> or <tt class="docutils literal"><span class="pre">-std=gnu++11</span></tt> option
+when compiling C++ code.</p>
+<div class="section" id="c-11-sfinae-includes-access-control">
+<h4>C++11 SFINAE includes access control<a class="headerlink" href="#c-11-sfinae-includes-access-control" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_access_control_sfinae)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_access_control_sfinae)</span></tt> to determine whether
+access-control errors (e.g., calling a private constructor) are considered to
+be template argument deduction errors (aka SFINAE errors), per <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-2Dstd.org_jtc1_sc22_wg21_docs_cwg-5Fdefects.html-231170&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QCiejObz8gZcWsLCvlIBQspafI7fza4hY1fDj0oWNHE&e=">C++ DR1170</a>.</p>
+</div>
+<div class="section" id="c-11-alias-templates">
+<h4>C++11 alias templates<a class="headerlink" href="#c-11-alias-templates" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_alias_templates)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_alias_templates)</span></tt> to determine if support for C++11’s
+alias declarations and alias templates is enabled.</p>
+</div>
+<div class="section" id="c-11-alignment-specifiers">
+<h4>C++11 alignment specifiers<a class="headerlink" href="#c-11-alignment-specifiers" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_alignas)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_alignas)</span></tt> to
+determine if support for alignment specifiers using <tt class="docutils literal"><span class="pre">alignas</span></tt> is enabled.</p>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_alignof)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_alignof)</span></tt> to
+determine if support for the <tt class="docutils literal"><span class="pre">alignof</span></tt> keyword is enabled.</p>
+</div>
+<div class="section" id="c-11-attributes">
+<h4>C++11 attributes<a class="headerlink" href="#c-11-attributes" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_attributes)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_attributes)</span></tt> to
+determine if support for attribute parsing with C++11’s square bracket notation
+is enabled.</p>
+</div>
+<div class="section" id="c-11-generalized-constant-expressions">
+<h4>C++11 generalized constant expressions<a class="headerlink" href="#c-11-generalized-constant-expressions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_constexpr)</span></tt> to determine if support for generalized
+constant expressions (e.g., <tt class="docutils literal"><span class="pre">constexpr</span></tt>) is enabled.</p>
+</div>
+<div class="section" id="c-11-decltype">
+<h4>C++11 <tt class="docutils literal"><span class="pre">decltype()</span></tt><a class="headerlink" href="#c-11-decltype" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_decltype)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_decltype)</span></tt> to
+determine if support for the <tt class="docutils literal"><span class="pre">decltype()</span></tt> specifier is enabled.  C++11’s
+<tt class="docutils literal"><span class="pre">decltype</span></tt> does not require type-completeness of a function call expression.
+Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_decltype_incomplete_return_types)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_decltype_incomplete_return_types)</span></tt> to determine if
+support for this feature is enabled.</p>
+</div>
+<div class="section" id="c-11-default-template-arguments-in-function-templates">
+<h4>C++11 default template arguments in function templates<a class="headerlink" href="#c-11-default-template-arguments-in-function-templates" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_default_function_template_args)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_default_function_template_args)</span></tt> to determine if support
+for default template arguments in function templates is enabled.</p>
+</div>
+<div class="section" id="c-11-defaulted-functions">
+<h4>C++11 <tt class="docutils literal"><span class="pre">default</span></tt>ed functions<a class="headerlink" href="#c-11-defaulted-functions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_defaulted_functions)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_defaulted_functions)</span></tt> to determine if support for
+defaulted function definitions (with <tt class="docutils literal"><span class="pre">=</span> <span class="pre">default</span></tt>) is enabled.</p>
+</div>
+<div class="section" id="c-11-delegating-constructors">
+<h4>C++11 delegating constructors<a class="headerlink" href="#c-11-delegating-constructors" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_delegating_constructors)</span></tt> to determine if support for
+delegating constructors is enabled.</p>
+</div>
+<div class="section" id="c-11-deleted-functions">
+<h4>C++11 <tt class="docutils literal"><span class="pre">deleted</span></tt> functions<a class="headerlink" href="#c-11-deleted-functions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_deleted_functions)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_deleted_functions)</span></tt> to determine if support for deleted
+function definitions (with <tt class="docutils literal"><span class="pre">=</span> <span class="pre">delete</span></tt>) is enabled.</p>
+</div>
+<div class="section" id="c-11-explicit-conversion-functions">
+<h4>C++11 explicit conversion functions<a class="headerlink" href="#c-11-explicit-conversion-functions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_explicit_conversions)</span></tt> to determine if support for
+<tt class="docutils literal"><span class="pre">explicit</span></tt> conversion functions is enabled.</p>
+</div>
+<div class="section" id="c-11-generalized-initializers">
+<h4>C++11 generalized initializers<a class="headerlink" href="#c-11-generalized-initializers" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_generalized_initializers)</span></tt> to determine if support for
+generalized initializers (using braced lists and <tt class="docutils literal"><span class="pre">std::initializer_list</span></tt>) is
+enabled.</p>
+</div>
+<div class="section" id="c-11-implicit-move-constructors-assignment-operators">
+<h4>C++11 implicit move constructors/assignment operators<a class="headerlink" href="#c-11-implicit-move-constructors-assignment-operators" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_implicit_moves)</span></tt> to determine if Clang will implicitly
+generate move constructors and move assignment operators where needed.</p>
+</div>
+<div class="section" id="c-11-inheriting-constructors">
+<h4>C++11 inheriting constructors<a class="headerlink" href="#c-11-inheriting-constructors" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_inheriting_constructors)</span></tt> to determine if support for
+inheriting constructors is enabled.</p>
+</div>
+<div class="section" id="c-11-inline-namespaces">
+<h4>C++11 inline namespaces<a class="headerlink" href="#c-11-inline-namespaces" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_inline_namespaces)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_inline_namespaces)</span></tt> to determine if support for inline
+namespaces is enabled.</p>
+</div>
+<div class="section" id="c-11-lambdas">
+<h4>C++11 lambdas<a class="headerlink" href="#c-11-lambdas" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_lambdas)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_lambdas)</span></tt> to
+determine if support for lambdas is enabled.</p>
+</div>
+<div class="section" id="c-11-local-and-unnamed-types-as-template-arguments">
+<h4>C++11 local and unnamed types as template arguments<a class="headerlink" href="#c-11-local-and-unnamed-types-as-template-arguments" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_local_type_template_args)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_local_type_template_args)</span></tt> to determine if support for
+local and unnamed types as template arguments is enabled.</p>
+</div>
+<div class="section" id="c-11-noexcept">
+<h4>C++11 noexcept<a class="headerlink" href="#c-11-noexcept" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_noexcept)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_noexcept)</span></tt> to
+determine if support for noexcept exception specifications is enabled.</p>
+</div>
+<div class="section" id="c-11-in-class-non-static-data-member-initialization">
+<h4>C++11 in-class non-static data member initialization<a class="headerlink" href="#c-11-in-class-non-static-data-member-initialization" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_nonstatic_member_init)</span></tt> to determine whether in-class
+initialization of non-static data members is enabled.</p>
+</div>
+<div class="section" id="c-11-nullptr">
+<h4>C++11 <tt class="docutils literal"><span class="pre">nullptr</span></tt><a class="headerlink" href="#c-11-nullptr" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_nullptr)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_nullptr)</span></tt> to
+determine if support for <tt class="docutils literal"><span class="pre">nullptr</span></tt> is enabled.</p>
+</div>
+<div class="section" id="c-11-override-control">
+<h4>C++11 <tt class="docutils literal"><span class="pre">override</span> <span class="pre">control</span></tt><a class="headerlink" href="#c-11-override-control" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_override_control)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_override_control)</span></tt> to determine if support for the
+override control keywords is enabled.</p>
+</div>
+<div class="section" id="c-11-reference-qualified-functions">
+<h4>C++11 reference-qualified functions<a class="headerlink" href="#c-11-reference-qualified-functions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_reference_qualified_functions)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_reference_qualified_functions)</span></tt> to determine if support
+for reference-qualified functions (e.g., member functions with <tt class="docutils literal"><span class="pre">&</span></tt> or <tt class="docutils literal"><span class="pre">&&</span></tt>
+applied to <tt class="docutils literal"><span class="pre">*this</span></tt>) is enabled.</p>
+</div>
+<div class="section" id="c-11-range-based-for-loop">
+<h4>C++11 range-based <tt class="docutils literal"><span class="pre">for</span></tt> loop<a class="headerlink" href="#c-11-range-based-for-loop" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_range_for)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_range_for)</span></tt> to
+determine if support for the range-based for loop is enabled.</p>
+</div>
+<div class="section" id="c-11-raw-string-literals">
+<h4>C++11 raw string literals<a class="headerlink" href="#c-11-raw-string-literals" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_raw_string_literals)</span></tt> to determine if support for raw
+string literals (e.g., <tt class="docutils literal"><span class="pre">R"x(foo\bar)x"</span></tt>) is enabled.</p>
+</div>
+<div class="section" id="c-11-rvalue-references">
+<h4>C++11 rvalue references<a class="headerlink" href="#c-11-rvalue-references" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_rvalue_references)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_rvalue_references)</span></tt> to determine if support for rvalue
+references is enabled.</p>
+</div>
+<div class="section" id="c-11-static-assert">
+<h4>C++11 <tt class="docutils literal"><span class="pre">static_assert()</span></tt><a class="headerlink" href="#c-11-static-assert" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_static_assert)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_static_assert)</span></tt> to determine if support for compile-time
+assertions using <tt class="docutils literal"><span class="pre">static_assert</span></tt> is enabled.</p>
+</div>
+<div class="section" id="c-11-thread-local">
+<h4>C++11 <tt class="docutils literal"><span class="pre">thread_local</span></tt><a class="headerlink" href="#c-11-thread-local" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_thread_local)</span></tt> to determine if support for
+<tt class="docutils literal"><span class="pre">thread_local</span></tt> variables is enabled.</p>
+</div>
+<div class="section" id="c-11-type-inference">
+<h4>C++11 type inference<a class="headerlink" href="#c-11-type-inference" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_auto_type)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(cxx_auto_type)</span></tt> to
+determine C++11 type inference is supported using the <tt class="docutils literal"><span class="pre">auto</span></tt> specifier.  If
+this is disabled, <tt class="docutils literal"><span class="pre">auto</span></tt> will instead be a storage class specifier, as in C
+or C++98.</p>
+</div>
+<div class="section" id="c-11-strongly-typed-enumerations">
+<h4>C++11 strongly typed enumerations<a class="headerlink" href="#c-11-strongly-typed-enumerations" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_strong_enums)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_strong_enums)</span></tt> to determine if support for strongly
+typed, scoped enumerations is enabled.</p>
+</div>
+<div class="section" id="c-11-trailing-return-type">
+<h4>C++11 trailing return type<a class="headerlink" href="#c-11-trailing-return-type" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_trailing_return)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_trailing_return)</span></tt> to determine if support for the
+alternate function declaration syntax with trailing return type is enabled.</p>
+</div>
+<div class="section" id="c-11-unicode-string-literals">
+<h4>C++11 Unicode string literals<a class="headerlink" href="#c-11-unicode-string-literals" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_unicode_literals)</span></tt> to determine if support for Unicode
+string literals is enabled.</p>
+</div>
+<div class="section" id="c-11-unrestricted-unions">
+<h4>C++11 unrestricted unions<a class="headerlink" href="#c-11-unrestricted-unions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_unrestricted_unions)</span></tt> to determine if support for
+unrestricted unions is enabled.</p>
+</div>
+<div class="section" id="c-11-user-defined-literals">
+<h4>C++11 user-defined literals<a class="headerlink" href="#c-11-user-defined-literals" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_user_literals)</span></tt> to determine if support for
+user-defined literals is enabled.</p>
+</div>
+<div class="section" id="c-11-variadic-templates">
+<h4>C++11 variadic templates<a class="headerlink" href="#c-11-variadic-templates" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_variadic_templates)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_variadic_templates)</span></tt> to determine if support for
+variadic templates is enabled.</p>
+</div>
+</div>
+<div class="section" id="c-1y">
+<h3>C++1y<a class="headerlink" href="#c-1y" title="Permalink to this headline">¶</a></h3>
+<p>The features listed below are part of the committee draft for the C++1y
+standard.  As a result, all these features are enabled with the <tt class="docutils literal"><span class="pre">-std=c++1y</span></tt>
+or <tt class="docutils literal"><span class="pre">-std=gnu++1y</span></tt> option when compiling C++ code.</p>
+<div class="section" id="c-1y-binary-literals">
+<h4>C++1y binary literals<a class="headerlink" href="#c-1y-binary-literals" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_binary_literals)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_binary_literals)</span></tt> to determine whether
+binary literals (for instance, <tt class="docutils literal"><span class="pre">0b10010</span></tt>) are recognized. Clang supports this
+feature as an extension in all language modes.</p>
+</div>
+<div class="section" id="c-1y-contextual-conversions">
+<h4>C++1y contextual conversions<a class="headerlink" href="#c-1y-contextual-conversions" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_contextual_conversions)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_contextual_conversions)</span></tt> to determine if the C++1y rules
+are used when performing an implicit conversion for an array bound in a
+<em>new-expression</em>, the operand of a <em>delete-expression</em>, an integral constant
+expression, or a condition in a <tt class="docutils literal"><span class="pre">switch</span></tt> statement.</p>
+</div>
+<div class="section" id="c-1y-decltype-auto">
+<h4>C++1y decltype(auto)<a class="headerlink" href="#c-1y-decltype-auto" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_decltype_auto)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_decltype_auto)</span></tt> to determine if support
+for the <tt class="docutils literal"><span class="pre">decltype(auto)</span></tt> placeholder type is enabled.</p>
+</div>
+<div class="section" id="c-1y-default-initializers-for-aggregates">
+<h4>C++1y default initializers for aggregates<a class="headerlink" href="#c-1y-default-initializers-for-aggregates" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_aggregate_nsdmi)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_aggregate_nsdmi)</span></tt> to determine if support
+for default initializers in aggregate members is enabled.</p>
+</div>
+<div class="section" id="c-1y-digit-separators">
+<h4>C++1y digit separators<a class="headerlink" href="#c-1y-digit-separators" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__cpp_digit_separators</span></tt> to determine if support for digit separators
+using single quotes (for instance, <tt class="docutils literal"><span class="pre">10'000</span></tt>) is enabled. At this time, there
+is no corresponding <tt class="docutils literal"><span class="pre">__has_feature</span></tt> name</p>
+</div>
+<div class="section" id="c-1y-generalized-lambda-capture">
+<h4>C++1y generalized lambda capture<a class="headerlink" href="#c-1y-generalized-lambda-capture" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_init_captures)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_init_captures)</span></tt> to determine if support for
+lambda captures with explicit initializers is enabled
+(for instance, <tt class="docutils literal"><span class="pre">[n(0)]</span> <span class="pre">{</span> <span class="pre">return</span> <span class="pre">++n;</span> <span class="pre">}</span></tt>).</p>
+</div>
+<div class="section" id="c-1y-generic-lambdas">
+<h4>C++1y generic lambdas<a class="headerlink" href="#c-1y-generic-lambdas" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_generic_lambdas)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_generic_lambdas)</span></tt> to determine if support for generic
+(polymorphic) lambdas is enabled
+(for instance, <tt class="docutils literal"><span class="pre">[]</span> <span class="pre">(auto</span> <span class="pre">x)</span> <span class="pre">{</span> <span class="pre">return</span> <span class="pre">x</span> <span class="pre">+</span> <span class="pre">1;</span> <span class="pre">}</span></tt>).</p>
+</div>
+<div class="section" id="c-1y-relaxed-constexpr">
+<h4>C++1y relaxed constexpr<a class="headerlink" href="#c-1y-relaxed-constexpr" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_relaxed_constexpr)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_relaxed_constexpr)</span></tt> to determine if variable
+declarations, local variable modification, and control flow constructs
+are permitted in <tt class="docutils literal"><span class="pre">constexpr</span></tt> functions.</p>
+</div>
+<div class="section" id="c-1y-return-type-deduction">
+<h4>C++1y return type deduction<a class="headerlink" href="#c-1y-return-type-deduction" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_return_type_deduction)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_return_type_deduction)</span></tt> to determine if support
+for return type deduction for functions (using <tt class="docutils literal"><span class="pre">auto</span></tt> as a return type)
+is enabled.</p>
+</div>
+<div class="section" id="c-1y-runtime-sized-arrays">
+<h4>C++1y runtime-sized arrays<a class="headerlink" href="#c-1y-runtime-sized-arrays" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_runtime_array)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_runtime_array)</span></tt> to determine if support
+for arrays of runtime bound (a restricted form of variable-length arrays)
+is enabled.
+Clang’s implementation of this feature is incomplete.</p>
+</div>
+<div class="section" id="c-1y-variable-templates">
+<h4>C++1y variable templates<a class="headerlink" href="#c-1y-variable-templates" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(cxx_variable_templates)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(cxx_variable_templates)</span></tt> to determine if support for
+templated variable declarations is enabled.</p>
+</div>
+</div>
+<div class="section" id="c11">
+<h3>C11<a class="headerlink" href="#c11" title="Permalink to this headline">¶</a></h3>
+<p>The features listed below are part of the C11 standard.  As a result, all these
+features are enabled with the <tt class="docutils literal"><span class="pre">-std=c11</span></tt> or <tt class="docutils literal"><span class="pre">-std=gnu11</span></tt> option when
+compiling C code.  Additionally, because these features are all
+backward-compatible, they are available as extensions in all language modes.</p>
+<div class="section" id="c11-alignment-specifiers">
+<h4>C11 alignment specifiers<a class="headerlink" href="#c11-alignment-specifiers" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(c_alignas)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(c_alignas)</span></tt> to determine
+if support for alignment specifiers using <tt class="docutils literal"><span class="pre">_Alignas</span></tt> is enabled.</p>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(c_alignof)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(c_alignof)</span></tt> to determine
+if support for the <tt class="docutils literal"><span class="pre">_Alignof</span></tt> keyword is enabled.</p>
+</div>
+<div class="section" id="c11-atomic-operations">
+<h4>C11 atomic operations<a class="headerlink" href="#c11-atomic-operations" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(c_atomic)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(c_atomic)</span></tt> to determine
+if support for atomic types using <tt class="docutils literal"><span class="pre">_Atomic</span></tt> is enabled.  Clang also provides
+<a class="reference internal" href="#langext-c11-atomic"><em>a set of builtins</em></a> which can be used to implement
+the <tt class="docutils literal"><span class="pre"><stdatomic.h></span></tt> operations on <tt class="docutils literal"><span class="pre">_Atomic</span></tt> types. Use
+<tt class="docutils literal"><span class="pre">__has_include(<stdatomic.h>)</span></tt> to determine if C11’s <tt class="docutils literal"><span class="pre"><stdatomic.h></span></tt> header
+is available.</p>
+<p>Clang will use the system’s <tt class="docutils literal"><span class="pre"><stdatomic.h></span></tt> header when one is available, and
+will otherwise use its own. When using its own, implementations of the atomic
+operations are provided as macros. In the cases where C11 also requires a real
+function, this header provides only the declaration of that function (along
+with a shadowing macro implementation), and you must link to a library which
+provides a definition of the function if you use it instead of the macro.</p>
+</div>
+<div class="section" id="c11-generic-selections">
+<h4>C11 generic selections<a class="headerlink" href="#c11-generic-selections" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(c_generic_selections)</span></tt> or
+<tt class="docutils literal"><span class="pre">__has_extension(c_generic_selections)</span></tt> to determine if support for generic
+selections is enabled.</p>
+<p>As an extension, the C11 generic selection expression is available in all
+languages supported by Clang.  The syntax is the same as that given in the C11
+standard.</p>
+<p>In C, type compatibility is decided according to the rules given in the
+appropriate standard, but in C++, which lacks the type compatibility rules used
+in C, types are considered compatible only if they are equivalent.</p>
+</div>
+<div class="section" id="c11-static-assert">
+<h4>C11 <tt class="docutils literal"><span class="pre">_Static_assert()</span></tt><a class="headerlink" href="#c11-static-assert" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(c_static_assert)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(c_static_assert)</span></tt>
+to determine if support for compile-time assertions using <tt class="docutils literal"><span class="pre">_Static_assert</span></tt> is
+enabled.</p>
+</div>
+<div class="section" id="c11-thread-local">
+<h4>C11 <tt class="docutils literal"><span class="pre">_Thread_local</span></tt><a class="headerlink" href="#c11-thread-local" title="Permalink to this headline">¶</a></h4>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(c_thread_local)</span></tt> or <tt class="docutils literal"><span class="pre">__has_extension(c_thread_local)</span></tt>
+to determine if support for <tt class="docutils literal"><span class="pre">_Thread_local</span></tt> variables is enabled.</p>
+</div>
+</div>
+</div>
+<div class="section" id="checks-for-type-trait-primitives">
+<h2><a class="toc-backref" href="#id10">Checks for Type Trait Primitives</a><a class="headerlink" href="#checks-for-type-trait-primitives" title="Permalink to this headline">¶</a></h2>
+<p>Type trait primitives are special builtin constant expressions that can be used
+by the standard C++ library to facilitate or simplify the implementation of
+user-facing type traits in the <type_traits> header.</p>
+<p>They are not intended to be used directly by user code because they are
+implementation-defined and subject to change – as such they’re tied closely to
+the supported set of system headers, currently:</p>
+<ul class="simple">
+<li>LLVM’s own libc++</li>
+<li>GNU libstdc++</li>
+<li>The Microsoft standard C++ library</li>
+</ul>
+<p>Clang supports the <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__gcc.gnu.org_onlinedocs_gcc_Type-2DTraits.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=iOk9ussNPrUSB9x9eO81q3OBM88v-tKY9Q3x__XhOp4&e=">GNU C++ type traits</a> and a subset of the
+<a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dus_library_ms177194-28v-3DVS.100-29.aspx&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=H4lXM9orqDjTHQeJXqpRJFEeU1joIa1k8iSs3KaUJjc&e=">Microsoft Visual C++ Type traits</a>.</p>
+<p>Feature detection is supported only for some of the primitives at present. User
+code should not use these checks because they bear no direct relation to the
+actual set of type traits supported by the C++ standard library.</p>
+<p>For type trait <tt class="docutils literal"><span class="pre">__X</span></tt>, <tt class="docutils literal"><span class="pre">__has_extension(X)</span></tt> indicates the presence of the
+type trait primitive in the compiler. A simplistic usage example as might be
+seen in standard C++ headers follows:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#if __has_extension(is_convertible_to)</span>
+<span class="k">template</span><span class="o"><</span><span class="k">typename</span> <span class="n">From</span><span class="p">,</span> <span class="k">typename</span> <span class="n">To</span><span class="o">></span>
+<span class="k">struct</span> <span class="n">is_convertible_to</span> <span class="p">{</span>
+  <span class="k">static</span> <span class="k">const</span> <span class="kt">bool</span> <span class="n">value</span> <span class="o">=</span> <span class="n">__is_convertible_to</span><span class="p">(</span><span class="n">From</span><span class="p">,</span> <span class="n">To</span><span class="p">);</span>
+<span class="p">};</span>
+<span class="cp">#else</span>
+<span class="c1">// Emulate type trait for compatibility with other compilers.</span>
+<span class="cp">#endif</span>
+</pre></div>
+</div>
+<p>The following type trait primitives are supported by Clang:</p>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">__has_nothrow_assign</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_nothrow_copy</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_nothrow_constructor</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_trivial_assign</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_trivial_copy</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_trivial_constructor</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_trivial_destructor</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__has_virtual_destructor</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_abstract</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_base_of</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_class</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_convertible_to</span></tt> (Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_empty</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_enum</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_interface_class</span></tt> (Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_pod</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_polymorphic</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_union</span></tt> (GNU, Microsoft)</li>
+<li><tt class="docutils literal"><span class="pre">__is_literal(type)</span></tt>: Determines whether the given type is a literal type</li>
+<li><tt class="docutils literal"><span class="pre">__is_final</span></tt>: Determines whether the given type is declared with a
+<tt class="docutils literal"><span class="pre">final</span></tt> class-virt-specifier.</li>
+<li><tt class="docutils literal"><span class="pre">__underlying_type(type)</span></tt>: Retrieves the underlying type for a given
+<tt class="docutils literal"><span class="pre">enum</span></tt> type.  This trait is required to implement the C++11 standard
+library.</li>
+<li><tt class="docutils literal"><span class="pre">__is_trivially_assignable(totype,</span> <span class="pre">fromtype)</span></tt>: Determines whether a value
+of type <tt class="docutils literal"><span class="pre">totype</span></tt> can be assigned to from a value of type <tt class="docutils literal"><span class="pre">fromtype</span></tt> such
+that no non-trivial functions are called as part of that assignment.  This
+trait is required to implement the C++11 standard library.</li>
+<li><tt class="docutils literal"><span class="pre">__is_trivially_constructible(type,</span> <span class="pre">argtypes...)</span></tt>: Determines whether a
+value of type <tt class="docutils literal"><span class="pre">type</span></tt> can be direct-initialized with arguments of types
+<tt class="docutils literal"><span class="pre">argtypes...</span></tt> such that no non-trivial functions are called as part of
+that initialization.  This trait is required to implement the C++11 standard
+library.</li>
+<li><tt class="docutils literal"><span class="pre">__is_destructible</span></tt> (MSVC 2013): partially implemented</li>
+<li><tt class="docutils literal"><span class="pre">__is_nothrow_destructible</span></tt> (MSVC 2013): partially implemented</li>
+<li><tt class="docutils literal"><span class="pre">__is_nothrow_assignable</span></tt> (MSVC 2013, clang)</li>
+<li><tt class="docutils literal"><span class="pre">__is_constructible</span></tt> (MSVC 2013, clang)</li>
+<li><tt class="docutils literal"><span class="pre">__is_nothrow_constructible</span></tt> (MSVC 2013, clang)</li>
+</ul>
+</div>
+<div class="section" id="blocks">
+<h2><a class="toc-backref" href="#id11">Blocks</a><a class="headerlink" href="#blocks" title="Permalink to this headline">¶</a></h2>
+<p>The syntax and high level language feature description is in
+<a class="reference internal" href="BlockLanguageSpec.html"><em>BlockLanguageSpec</em></a>. Implementation and ABI details for
+the clang implementation are in <a class="reference internal" href="Block-ABI-Apple.html"><em>Block-ABI-Apple</em></a>.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_extension(blocks)</span></tt>.</p>
+</div>
+<div class="section" id="objective-c-features">
+<h2><a class="toc-backref" href="#id12">Objective-C Features</a><a class="headerlink" href="#objective-c-features" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="related-result-types">
+<h3>Related result types<a class="headerlink" href="#related-result-types" title="Permalink to this headline">¶</a></h3>
+<p>According to Cocoa conventions, Objective-C methods with certain names
+(“<tt class="docutils literal"><span class="pre">init</span></tt>”, “<tt class="docutils literal"><span class="pre">alloc</span></tt>”, etc.) always return objects that are an instance of
+the receiving class’s type.  Such methods are said to have a “related result
+type”, meaning that a message send to one of these methods will have the same
+static type as an instance of the receiver class.  For example, given the
+following classes:</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="k">@interface</span> <span class="nc">NSObject</span>
+<span class="k">+</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">alloc</span><span class="p">;</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">init</span><span class="p">;</span>
+<span class="k">@end</span>
+
+<span class="k">@interface</span> <span class="nc">NSArray</span> : <span class="nc">NSObject</span>
+<span class="k">@end</span>
+</pre></div>
+</div>
+<p>and this common initialization pattern</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="n">NSArray</span> <span class="o">*</span><span class="n">array</span> <span class="o">=</span> <span class="p">[[</span><span class="n">NSArray</span> <span class="n">alloc</span><span class="p">]</span> <span class="n">init</span><span class="p">];</span>
+</pre></div>
+</div>
+<p>the type of the expression <tt class="docutils literal"><span class="pre">[NSArray</span> <span class="pre">alloc]</span></tt> is <tt class="docutils literal"><span class="pre">NSArray*</span></tt> because
+<tt class="docutils literal"><span class="pre">alloc</span></tt> implicitly has a related result type.  Similarly, the type of the
+expression <tt class="docutils literal"><span class="pre">[[NSArray</span> <span class="pre">alloc]</span> <span class="pre">init]</span></tt> is <tt class="docutils literal"><span class="pre">NSArray*</span></tt>, since <tt class="docutils literal"><span class="pre">init</span></tt> has a
+related result type and its receiver is known to have the type <tt class="docutils literal"><span class="pre">NSArray</span> <span class="pre">*</span></tt>.
+If neither <tt class="docutils literal"><span class="pre">alloc</span></tt> nor <tt class="docutils literal"><span class="pre">init</span></tt> had a related result type, the expressions
+would have had type <tt class="docutils literal"><span class="pre">id</span></tt>, as declared in the method signature.</p>
+<p>A method with a related result type can be declared by using the type
+<tt class="docutils literal"><span class="pre">instancetype</span></tt> as its result type.  <tt class="docutils literal"><span class="pre">instancetype</span></tt> is a contextual keyword
+that is only permitted in the result type of an Objective-C method, e.g.</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="k">@interface</span> <span class="nc">A</span>
+<span class="k">+</span> <span class="p">(</span><span class="n">instancetype</span><span class="p">)</span><span class="nf">constructAnA</span><span class="p">;</span>
+<span class="k">@end</span>
+</pre></div>
+</div>
+<p>The related result type can also be inferred for some methods.  To determine
+whether a method has an inferred related result type, the first word in the
+camel-case selector (e.g., “<tt class="docutils literal"><span class="pre">init</span></tt>” in “<tt class="docutils literal"><span class="pre">initWithObjects</span></tt>”) is considered,
+and the method will have a related result type if its return type is compatible
+with the type of its class and if:</p>
+<ul class="simple">
+<li>the first word is “<tt class="docutils literal"><span class="pre">alloc</span></tt>” or “<tt class="docutils literal"><span class="pre">new</span></tt>”, and the method is a class method,
+or</li>
+<li>the first word is “<tt class="docutils literal"><span class="pre">autorelease</span></tt>”, “<tt class="docutils literal"><span class="pre">init</span></tt>”, “<tt class="docutils literal"><span class="pre">retain</span></tt>”, or “<tt class="docutils literal"><span class="pre">self</span></tt>”,
+and the method is an instance method.</li>
+</ul>
+<p>If a method with a related result type is overridden by a subclass method, the
+subclass method must also return a type that is compatible with the subclass
+type.  For example:</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="k">@interface</span> <span class="nc">NSString</span> : <span class="nc">NSObject</span>
+<span class="k">-</span> <span class="p">(</span><span class="n">NSUnrelated</span> <span class="o">*</span><span class="p">)</span><span class="nf">init</span><span class="p">;</span> <span class="c1">// incorrect usage: NSUnrelated is not NSString or a superclass of NSString</span>
+<span class="k">@end</span>
+</pre></div>
+</div>
+<p>Related result types only affect the type of a message send or property access
+via the given method.  In all other respects, a method with a related result
+type is treated the same way as method that returns <tt class="docutils literal"><span class="pre">id</span></tt>.</p>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(objc_instancetype)</span></tt> to determine whether the
+<tt class="docutils literal"><span class="pre">instancetype</span></tt> contextual keyword is available.</p>
+</div>
+<div class="section" id="automatic-reference-counting">
+<h3>Automatic reference counting<a class="headerlink" href="#automatic-reference-counting" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides support for <a class="reference internal" href="AutomaticReferenceCounting.html"><em>automated reference counting</em></a> in Objective-C, which eliminates the need
+for manual <tt class="docutils literal"><span class="pre">retain</span></tt>/<tt class="docutils literal"><span class="pre">release</span></tt>/<tt class="docutils literal"><span class="pre">autorelease</span></tt> message sends.  There are two
+feature macros associated with automatic reference counting:
+<tt class="docutils literal"><span class="pre">__has_feature(objc_arc)</span></tt> indicates the availability of automated reference
+counting in general, while <tt class="docutils literal"><span class="pre">__has_feature(objc_arc_weak)</span></tt> indicates that
+automated reference counting also includes support for <tt class="docutils literal"><span class="pre">__weak</span></tt> pointers to
+Objective-C objects.</p>
+</div>
+<div class="section" id="enumerations-with-a-fixed-underlying-type">
+<span id="objc-fixed-enum"></span><h3>Enumerations with a fixed underlying type<a class="headerlink" href="#enumerations-with-a-fixed-underlying-type" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides support for C++11 enumerations with a fixed underlying type
+within Objective-C.  For example, one can write an enumeration type as:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">typedef</span> <span class="k">enum</span> <span class="o">:</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="p">{</span> <span class="n">Red</span><span class="p">,</span> <span class="n">Green</span><span class="p">,</span> <span class="n">Blue</span> <span class="p">}</span> <span class="n">Color</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>This specifies that the underlying type, which is used to store the enumeration
+value, is <tt class="docutils literal"><span class="pre">unsigned</span> <span class="pre">char</span></tt>.</p>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(objc_fixed_enum)</span></tt> to determine whether support for fixed
+underlying types is available in Objective-C.</p>
+</div>
+<div class="section" id="interoperability-with-c-11-lambdas">
+<h3>Interoperability with C++11 lambdas<a class="headerlink" href="#interoperability-with-c-11-lambdas" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides interoperability between C++11 lambdas and blocks-based APIs, by
+permitting a lambda to be implicitly converted to a block pointer with the
+corresponding signature.  For example, consider an API such as <tt class="docutils literal"><span class="pre">NSArray</span></tt>‘s
+array-sorting method:</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="k">-</span> <span class="p">(</span><span class="n">NSArray</span> <span class="o">*</span><span class="p">)</span><span class="nf">sortedArrayUsingComparator:</span><span class="p">(</span><span class="n">NSComparator</span><span class="p">)</span><span class="nv">cmptr</span><span class="p">;</span>
+</pre></div>
+</div>
+<p><tt class="docutils literal"><span class="pre">NSComparator</span></tt> is simply a typedef for the block pointer <tt class="docutils literal"><span class="pre">NSComparisonResult</span>
+<span class="pre">(^)(id,</span> <span class="pre">id)</span></tt>, and parameters of this type are generally provided with block
+literals as arguments.  However, one can also use a C++11 lambda so long as it
+provides the same signature (in this case, accepting two parameters of type
+<tt class="docutils literal"><span class="pre">id</span></tt> and returning an <tt class="docutils literal"><span class="pre">NSComparisonResult</span></tt>):</p>
+<div class="highlight-objc"><pre>NSArray *array = @[@"string 1", @"string 21", @"string 12", @"String 11",
+                   @"String 02"];
+const NSStringCompareOptions comparisonOptions
+  = NSCaseInsensitiveSearch | NSNumericSearch |
+    NSWidthInsensitiveSearch | NSForcedOrderingSearch;
+NSLocale *currentLocale = [NSLocale currentLocale];
+NSArray *sorted
+  = [array sortedArrayUsingComparator:[=](id s1, id s2) -> NSComparisonResult {
+             NSRange string1Range = NSMakeRange(0, [s1 length]);
+             return [s1 compare:s2 options:comparisonOptions
+             range:string1Range locale:currentLocale];
+     }];
+NSLog(@"sorted: %@", sorted);</pre>
+</div>
+<p>This code relies on an implicit conversion from the type of the lambda
+expression (an unnamed, local class type called the <em>closure type</em>) to the
+corresponding block pointer type.  The conversion itself is expressed by a
+conversion operator in that closure type that produces a block pointer with the
+same signature as the lambda itself, e.g.,</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="n">operator</span> <span class="n">NSComparisonResult</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">id</span><span class="p">,</span> <span class="kt">id</span><span class="p">)()</span> <span class="k">const</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>This conversion function returns a new block that simply forwards the two
+parameters to the lambda object (which it captures by copy), then returns the
+result.  The returned block is first copied (with <tt class="docutils literal"><span class="pre">Block_copy</span></tt>) and then
+autoreleased.  As an optimization, if a lambda expression is immediately
+converted to a block pointer (as in the first example, above), then the block
+is not copied and autoreleased: rather, it is given the same lifetime as a
+block literal written at that point in the program, which avoids the overhead
+of copying a block to the heap in the common case.</p>
+<p>The conversion from a lambda to a block pointer is only available in
+Objective-C++, and not in C++ with blocks, due to its use of Objective-C memory
+management (autorelease).</p>
+</div>
+<div class="section" id="object-literals-and-subscripting">
+<h3>Object Literals and Subscripting<a class="headerlink" href="#object-literals-and-subscripting" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides support for <a class="reference internal" href="ObjectiveCLiterals.html"><em>Object Literals and Subscripting</em></a> in Objective-C, which simplifies common Objective-C
+programming patterns, makes programs more concise, and improves the safety of
+container creation.  There are several feature macros associated with object
+literals and subscripting: <tt class="docutils literal"><span class="pre">__has_feature(objc_array_literals)</span></tt> tests the
+availability of array literals; <tt class="docutils literal"><span class="pre">__has_feature(objc_dictionary_literals)</span></tt>
+tests the availability of dictionary literals;
+<tt class="docutils literal"><span class="pre">__has_feature(objc_subscripting)</span></tt> tests the availability of object
+subscripting.</p>
+</div>
+<div class="section" id="objective-c-autosynthesis-of-properties">
+<h3>Objective-C Autosynthesis of Properties<a class="headerlink" href="#objective-c-autosynthesis-of-properties" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides support for autosynthesis of declared properties.  Using this
+feature, clang provides default synthesis of those properties not declared
+@dynamic and not having user provided backing getter and setter methods.
+<tt class="docutils literal"><span class="pre">__has_feature(objc_default_synthesize_properties)</span></tt> checks for availability
+of this feature in version of clang being used.</p>
+</div>
+<div class="section" id="objective-c-retaining-behavior-attributes">
+<span id="langext-objc-retain-release"></span><h3>Objective-C retaining behavior attributes<a class="headerlink" href="#objective-c-retaining-behavior-attributes" title="Permalink to this headline">¶</a></h3>
+<p>In Objective-C, functions and methods are generally assumed to follow the
+<a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__developer.apple.com_library_mac_-23documentation_Cocoa_Conceptual_MemoryMgmt_Articles_mmRules.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jlyQY73EO2YmtytUB6MpBdB7rMgPcrRYEaG0VxHwvgM&e=">Cocoa Memory Management</a>
+conventions for ownership of object arguments and
+return values. However, there are exceptions, and so Clang provides attributes
+to allow these exceptions to be documented. This are used by ARC and the
+<a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang-2Danalyzer.llvm.org&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=l3LY5jtfO9PcWRFaBr_T9I-vu1HHOI_3o2eDCvA38_Q&e=">static analyzer</a> Some exceptions may be
+better described using the <tt class="docutils literal"><span class="pre">objc_method_family</span></tt> attribute instead.</p>
+<p><strong>Usage</strong>: The <tt class="docutils literal"><span class="pre">ns_returns_retained</span></tt>, <tt class="docutils literal"><span class="pre">ns_returns_not_retained</span></tt>,
+<tt class="docutils literal"><span class="pre">ns_returns_autoreleased</span></tt>, <tt class="docutils literal"><span class="pre">cf_returns_retained</span></tt>, and
+<tt class="docutils literal"><span class="pre">cf_returns_not_retained</span></tt> attributes can be placed on methods and functions
+that return Objective-C or CoreFoundation objects. They are commonly placed at
+the end of a function prototype or method declaration:</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="kt">id</span> <span class="nf">foo</span><span class="p">()</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">ns_returns_retained</span><span class="p">));</span>
+
+<span class="k">-</span> <span class="p">(</span><span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nf">bar:</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="nv">x</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">ns_returns_retained</span><span class="p">));</span>
+</pre></div>
+</div>
+<p>The <tt class="docutils literal"><span class="pre">*_returns_retained</span></tt> attributes specify that the returned object has a +1
+retain count.  The <tt class="docutils literal"><span class="pre">*_returns_not_retained</span></tt> attributes specify that the return
+object has a +0 retain count, even if the normal convention for its selector
+would be +1.  <tt class="docutils literal"><span class="pre">ns_returns_autoreleased</span></tt> specifies that the returned object is
++0, but is guaranteed to live at least as long as the next flush of an
+autorelease pool.</p>
+<p><strong>Usage</strong>: The <tt class="docutils literal"><span class="pre">ns_consumed</span></tt> and <tt class="docutils literal"><span class="pre">cf_consumed</span></tt> attributes can be placed on
+an parameter declaration; they specify that the argument is expected to have a
++1 retain count, which will be balanced in some way by the function or method.
+The <tt class="docutils literal"><span class="pre">ns_consumes_self</span></tt> attribute can only be placed on an Objective-C
+method; it specifies that the method expects its <tt class="docutils literal"><span class="pre">self</span></tt> parameter to have a
++1 retain count, which it will balance in some way.</p>
+<div class="highlight-objc"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">foo</span><span class="p">(</span><span class="n">__attribute__</span><span class="p">((</span><span class="n">ns_consumed</span><span class="p">))</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">string</span><span class="p">);</span>
+
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">bar</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">ns_consumes_self</span><span class="p">));</span>
+<span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">baz:</span><span class="p">(</span><span class="kt">id</span><span class="p">)</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">ns_consumed</span><span class="p">))</span> <span class="n">x</span><span class="p">;</span>
+</pre></div>
+</div>
+<p>Further examples of these attributes are available in the static analyzer’s <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang-2Danalyzer.llvm.org_annotations.html-23cocoa-5Fmem&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=MqgHkP2ErPfGfdTzGjTP6aFnXXDJ6zvb41oUXK6Wq_8&e=">list of annotations for analysis</a>.</p>
+<p>Query for these features with <tt class="docutils literal"><span class="pre">__has_attribute(ns_consumed)</span></tt>,
+<tt class="docutils literal"><span class="pre">__has_attribute(ns_returns_retained)</span></tt>, etc.</p>
+</div>
+<div class="section" id="objective-c-abi-protocol-qualifier-mangling-of-parameters">
+<h3>Objective-C++ ABI: protocol-qualifier mangling of parameters<a class="headerlink" href="#objective-c-abi-protocol-qualifier-mangling-of-parameters" title="Permalink to this headline">¶</a></h3>
+<p>Starting with LLVM 3.4, Clang produces a new mangling for parameters whose
+type is a qualified-<tt class="docutils literal"><span class="pre">id</span></tt> (e.g., <tt class="docutils literal"><span class="pre">id<Foo></span></tt>).  This mangling allows such
+parameters to be differentiated from those with the regular unqualified <tt class="docutils literal"><span class="pre">id</span></tt>
+type.</p>
+<p>This was a non-backward compatible mangling change to the ABI.  This change
+allows proper overloading, and also prevents mangling conflicts with template
+parameters of protocol-qualified type.</p>
+<p>Query the presence of this new mangling with
+<tt class="docutils literal"><span class="pre">__has_feature(objc_protocol_qualifier_mangling)</span></tt>.</p>
+</div>
+</div>
+<div class="section" id="initializer-lists-for-complex-numbers-in-c">
+<span id="langext-overloading"></span><h2><a class="toc-backref" href="#id13">Initializer lists for complex numbers in C</a><a class="headerlink" href="#initializer-lists-for-complex-numbers-in-c" title="Permalink to this headline">¶</a></h2>
+<p>clang supports an extension which allows the following in C:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#include <math.h></span>
+<span class="cp">#include <complex.h></span>
+<span class="n">complex</span> <span class="kt">float</span> <span class="n">x</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="n">INFINITY</span> <span class="p">};</span> <span class="c1">// Init to (1, Inf)</span>
+</pre></div>
+</div>
+<p>This construct is useful because there is no way to separately initialize the
+real and imaginary parts of a complex variable in standard C, given that clang
+does not support <tt class="docutils literal"><span class="pre">_Imaginary</span></tt>.  (Clang also supports the <tt class="docutils literal"><span class="pre">__real__</span></tt> and
+<tt class="docutils literal"><span class="pre">__imag__</span></tt> extensions from gcc, which help in some cases, but are not usable
+in static initializers.)</p>
+<p>Note that this extension does not allow eliding the braces; the meaning of the
+following two lines is different:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">complex</span> <span class="kt">float</span> <span class="n">x</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="p">{</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="mf">1.0f</span> <span class="p">}</span> <span class="p">};</span> <span class="c1">// [0] = (1, 1)</span>
+<span class="n">complex</span> <span class="kt">float</span> <span class="n">x</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">1.0f</span><span class="p">,</span> <span class="mf">1.0f</span> <span class="p">};</span> <span class="c1">// [0] = (1, 0), [1] = (1, 0)</span>
+</pre></div>
+</div>
+<p>This extension also works in C++ mode, as far as that goes, but does not apply
+to the C++ <tt class="docutils literal"><span class="pre">std::complex</span></tt>.  (In C++11, list initialization allows the same
+syntax to be used with <tt class="docutils literal"><span class="pre">std::complex</span></tt> with the same meaning.)</p>
+</div>
+<div class="section" id="builtin-functions">
+<h2><a class="toc-backref" href="#id14">Builtin Functions</a><a class="headerlink" href="#builtin-functions" title="Permalink to this headline">¶</a></h2>
+<p>Clang supports a number of builtin library functions with the same syntax as
+GCC, including things like <tt class="docutils literal"><span class="pre">__builtin_nan</span></tt>, <tt class="docutils literal"><span class="pre">__builtin_constant_p</span></tt>,
+<tt class="docutils literal"><span class="pre">__builtin_choose_expr</span></tt>, <tt class="docutils literal"><span class="pre">__builtin_types_compatible_p</span></tt>,
+<tt class="docutils literal"><span class="pre">__builtin_assume_aligned</span></tt>, <tt class="docutils literal"><span class="pre">__sync_fetch_and_add</span></tt>, etc.  In addition to
+the GCC builtins, Clang supports a number of builtins that GCC does not, which
+are listed here.</p>
+<p>Please note that Clang does not and will not support all of the GCC builtins
+for vector operations.  Instead of using builtins, you should use the functions
+defined in target-specific header files like <tt class="docutils literal"><span class="pre"><xmmintrin.h></span></tt>, which define
+portable wrappers for these.  Many of the Clang versions of these functions are
+implemented directly in terms of <a class="reference internal" href="#langext-vectors"><em>extended vector support</em></a> instead of builtins, in order to reduce the number of
+builtins that we need to implement.</p>
+<div class="section" id="builtin-assume">
+<h3><tt class="docutils literal"><span class="pre">__builtin_assume</span></tt><a class="headerlink" href="#builtin-assume" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_assume</span></tt> is used to provide the optimizer with a boolean
+invariant that is defined to be true.</p>
+<p><strong>Syntax</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">__builtin_assume</span><span class="p">(</span><span class="kt">bool</span><span class="p">)</span>
+</pre></div>
+</div>
+<p><strong>Example of Use</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">int</span> <span class="nf">foo</span><span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">)</span> <span class="p">{</span>
+  <span class="n">__builtin_assume</span><span class="p">(</span><span class="n">x</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">);</span>
+
+  <span class="c1">// The optimizer may short-circuit this check using the invariant.</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">x</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">do_something</span><span class="p">();</span>
+
+  <span class="k">return</span> <span class="n">do_something_else</span><span class="p">();</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p><strong>Description</strong>:</p>
+<p>The boolean argument to this function is defined to be true. The optimizer may
+analyze the form of the expression provided as the argument and deduce from
+that information used to optimize the program. If the condition is violated
+during execution, the behavior is undefined. The argument itself is never
+evaluated, so any side effects of the expression will be discarded.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_builtin(__builtin_assume)</span></tt>.</p>
+</div>
+<div class="section" id="builtin-readcyclecounter">
+<h3><tt class="docutils literal"><span class="pre">__builtin_readcyclecounter</span></tt><a class="headerlink" href="#builtin-readcyclecounter" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_readcyclecounter</span></tt> is used to access the cycle counter register (or
+a similar low-latency, high-accuracy clock) on those targets that support it.</p>
+<p><strong>Syntax</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">__builtin_readcyclecounter</span><span class="p">()</span>
+</pre></div>
+</div>
+<p><strong>Example of Use</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">t0</span> <span class="o">=</span> <span class="n">__builtin_readcyclecounter</span><span class="p">();</span>
+<span class="n">do_something</span><span class="p">();</span>
+<span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">t1</span> <span class="o">=</span> <span class="n">__builtin_readcyclecounter</span><span class="p">();</span>
+<span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">cycles_to_do_something</span> <span class="o">=</span> <span class="n">t1</span> <span class="o">-</span> <span class="n">t0</span><span class="p">;</span> <span class="c1">// assuming no overflow</span>
+</pre></div>
+</div>
+<p><strong>Description</strong>:</p>
+<p>The <tt class="docutils literal"><span class="pre">__builtin_readcyclecounter()</span></tt> builtin returns the cycle counter value,
+which may be either global or process/thread-specific depending on the target.
+As the backing counters often overflow quickly (on the order of seconds) this
+should only be used for timing small intervals.  When not supported by the
+target, the return value is always zero.  This builtin takes no arguments and
+produces an unsigned long long result.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_builtin(__builtin_readcyclecounter)</span></tt>. Note
+that even if present, its use may depend on run-time privilege or other OS
+controlled state.</p>
+</div>
+<div class="section" id="builtin-shufflevector">
+<span id="langext-builtin-shufflevector"></span><h3><tt class="docutils literal"><span class="pre">__builtin_shufflevector</span></tt><a class="headerlink" href="#builtin-shufflevector" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_shufflevector</span></tt> is used to express generic vector
+permutation/shuffle/swizzle operations.  This builtin is also very important
+for the implementation of various target-specific header files like
+<tt class="docutils literal"><span class="pre"><xmmintrin.h></span></tt>.</p>
+<p><strong>Syntax</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">vec1</span><span class="p">,</span> <span class="n">vec2</span><span class="p">,</span> <span class="n">index1</span><span class="p">,</span> <span class="n">index2</span><span class="p">,</span> <span class="p">...)</span>
+</pre></div>
+</div>
+<p><strong>Examples</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// identity operation - return 4-element vector v1.</span>
+<span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
+
+<span class="c1">// "Splat" element 0 of V1 into a 4-element result.</span>
+<span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">V1</span><span class="p">,</span> <span class="n">V1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+<span class="c1">// Reverse 4-element vector V1.</span>
+<span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">V1</span><span class="p">,</span> <span class="n">V1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+
+<span class="c1">// Concatenate every other element of 4-element vectors V1 and V2.</span>
+<span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">V1</span><span class="p">,</span> <span class="n">V2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
+
+<span class="c1">// Concatenate every other element of 8-element vectors V1 and V2.</span>
+<span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">V1</span><span class="p">,</span> <span class="n">V2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
+
+<span class="c1">// Shuffle v1 with some elements being undefined</span>
+<span class="n">__builtin_shufflevector</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
+</pre></div>
+</div>
+<p><strong>Description</strong>:</p>
+<p>The first two arguments to <tt class="docutils literal"><span class="pre">__builtin_shufflevector</span></tt> are vectors that have
+the same element type.  The remaining arguments are a list of integers that
+specify the elements indices of the first two vectors that should be extracted
+and returned in a new vector.  These element indices are numbered sequentially
+starting with the first vector, continuing into the second vector.  Thus, if
+<tt class="docutils literal"><span class="pre">vec1</span></tt> is a 4-element vector, index 5 would refer to the second element of
+<tt class="docutils literal"><span class="pre">vec2</span></tt>. An index of -1 can be used to indicate that the corresponding element
+in the returned vector is a don’t care and can be optimized by the backend.</p>
+<p>The result of <tt class="docutils literal"><span class="pre">__builtin_shufflevector</span></tt> is a vector with the same element
+type as <tt class="docutils literal"><span class="pre">vec1</span></tt>/<tt class="docutils literal"><span class="pre">vec2</span></tt> but that has an element count equal to the number of
+indices specified.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_builtin(__builtin_shufflevector)</span></tt>.</p>
+</div>
+<div class="section" id="builtin-convertvector">
+<span id="langext-builtin-convertvector"></span><h3><tt class="docutils literal"><span class="pre">__builtin_convertvector</span></tt><a class="headerlink" href="#builtin-convertvector" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_convertvector</span></tt> is used to express generic vector
+type-conversion operations. The input vector and the output vector
+type must have the same number of elements.</p>
+<p><strong>Syntax</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">__builtin_convertvector</span><span class="p">(</span><span class="n">src_vec</span><span class="p">,</span> <span class="n">dst_vec_type</span><span class="p">)</span>
+</pre></div>
+</div>
+<p><strong>Examples</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">typedef</span> <span class="kt">double</span> <span class="n">vector4double</span> <span class="nf">__attribute__</span><span class="p">((</span><span class="n">__vector_size__</span><span class="p">(</span><span class="mi">32</span><span class="p">)));</span>
+<span class="k">typedef</span> <span class="kt">float</span>  <span class="n">vector4float</span>  <span class="nf">__attribute__</span><span class="p">((</span><span class="n">__vector_size__</span><span class="p">(</span><span class="mi">16</span><span class="p">)));</span>
+<span class="k">typedef</span> <span class="kt">short</span>  <span class="n">vector4short</span>  <span class="nf">__attribute__</span><span class="p">((</span><span class="n">__vector_size__</span><span class="p">(</span><span class="mi">8</span><span class="p">)));</span>
+<span class="n">vector4float</span> <span class="n">vf</span><span class="p">;</span> <span class="n">vector4short</span> <span class="n">vs</span><span class="p">;</span>
+
+<span class="c1">// convert from a vector of 4 floats to a vector of 4 doubles.</span>
+<span class="n">__builtin_convertvector</span><span class="p">(</span><span class="n">vf</span><span class="p">,</span> <span class="n">vector4double</span><span class="p">)</span>
+<span class="c1">// equivalent to:</span>
+<span class="p">(</span><span class="n">vector4double</span><span class="p">)</span> <span class="p">{</span> <span class="p">(</span><span class="kt">double</span><span class="p">)</span> <span class="n">vf</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="kt">double</span><span class="p">)</span> <span class="n">vf</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="p">(</span><span class="kt">double</span><span class="p">)</span> <span class="n">vf</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="p">(</span><span class="kt">double</span><span class="p">)</span> <span class="n">vf</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="p">}</span>
+
+<span class="c1">// convert from a vector of 4 shorts to a vector of 4 floats.</span>
+<span class="n">__builtin_convertvector</span><span class="p">(</span><span class="n">vs</span><span class="p">,</span> <span class="n">vector4float</span><span class="p">)</span>
+<span class="c1">// equivalent to:</span>
+<span class="p">(</span><span class="n">vector4float</span><span class="p">)</span> <span class="p">{</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">vs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">vs</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">vs</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="n">vs</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="p">}</span>
+</pre></div>
+</div>
+<p><strong>Description</strong>:</p>
+<p>The first argument to <tt class="docutils literal"><span class="pre">__builtin_convertvector</span></tt> is a vector, and the second
+argument is a vector type with the same number of elements as the first
+argument.</p>
+<p>The result of <tt class="docutils literal"><span class="pre">__builtin_convertvector</span></tt> is a vector with the same element
+type as the second argument, with a value defined in terms of the action of a
+C-style cast applied to each element of the first argument.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_builtin(__builtin_convertvector)</span></tt>.</p>
+</div>
+<div class="section" id="builtin-unreachable">
+<h3><tt class="docutils literal"><span class="pre">__builtin_unreachable</span></tt><a class="headerlink" href="#builtin-unreachable" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_unreachable</span></tt> is used to indicate that a specific point in the
+program cannot be reached, even if the compiler might otherwise think it can.
+This is useful to improve optimization and eliminates certain warnings.  For
+example, without the <tt class="docutils literal"><span class="pre">__builtin_unreachable</span></tt> in the example below, the
+compiler assumes that the inline asm can fall through and prints a “function
+declared ‘<tt class="docutils literal"><span class="pre">noreturn</span></tt>‘ should not return” warning.</p>
+<p><strong>Syntax</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">__builtin_unreachable</span><span class="p">()</span>
+</pre></div>
+</div>
+<p><strong>Example of use</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">myabort</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">noreturn</span><span class="p">));</span>
+<span class="kt">void</span> <span class="nf">myabort</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">asm</span><span class="p">(</span><span class="s">"int3"</span><span class="p">);</span>
+  <span class="n">__builtin_unreachable</span><span class="p">();</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p><strong>Description</strong>:</p>
+<p>The <tt class="docutils literal"><span class="pre">__builtin_unreachable()</span></tt> builtin has completely undefined behavior.
+Since it has undefined behavior, it is a statement that it is never reached and
+the optimizer can take advantage of this to produce better code.  This builtin
+takes no arguments and produces a void result.</p>
+<p>Query for this feature with <tt class="docutils literal"><span class="pre">__has_builtin(__builtin_unreachable)</span></tt>.</p>
+</div>
+<div class="section" id="sync-swap">
+<h3><tt class="docutils literal"><span class="pre">__sync_swap</span></tt><a class="headerlink" href="#sync-swap" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__sync_swap</span></tt> is used to atomically swap integers or pointers in memory.</p>
+<p><strong>Syntax</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="n">type</span> <span class="n">__sync_swap</span><span class="p">(</span><span class="n">type</span> <span class="o">*</span><span class="n">ptr</span><span class="p">,</span> <span class="n">type</span> <span class="n">value</span><span class="p">,</span> <span class="p">...)</span>
+</pre></div>
+</div>
+<p><strong>Example of Use</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="kt">int</span> <span class="n">old_value</span> <span class="o">=</span> <span class="n">__sync_swap</span><span class="p">(</span><span class="o">&</span><span class="n">value</span><span class="p">,</span> <span class="n">new_value</span><span class="p">);</span>
+</pre></div>
+</div>
+<p><strong>Description</strong>:</p>
+<p>The <tt class="docutils literal"><span class="pre">__sync_swap()</span></tt> builtin extends the existing <tt class="docutils literal"><span class="pre">__sync_*()</span></tt> family of
+atomic intrinsics to allow code to atomically swap the current value with the
+new value.  More importantly, it helps developers write more efficient and
+correct code by avoiding expensive loops around
+<tt class="docutils literal"><span class="pre">__sync_bool_compare_and_swap()</span></tt> or relying on the platform specific
+implementation details of <tt class="docutils literal"><span class="pre">__sync_lock_test_and_set()</span></tt>.  The
+<tt class="docutils literal"><span class="pre">__sync_swap()</span></tt> builtin is a full barrier.</p>
+</div>
+<div class="section" id="builtin-addressof">
+<h3><tt class="docutils literal"><span class="pre">__builtin_addressof</span></tt><a class="headerlink" href="#builtin-addressof" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_addressof</span></tt> performs the functionality of the built-in <tt class="docutils literal"><span class="pre">&</span></tt>
+operator, ignoring any <tt class="docutils literal"><span class="pre">operator&</span></tt> overload.  This is useful in constant
+expressions in C++11, where there is no other way to take the address of an
+object that overloads <tt class="docutils literal"><span class="pre">operator&</span></tt>.</p>
+<p><strong>Example of use</strong>:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">template</span><span class="o"><</span><span class="k">typename</span> <span class="n">T</span><span class="o">></span> <span class="n">constexpr</span> <span class="n">T</span> <span class="o">*</span><span class="n">addressof</span><span class="p">(</span><span class="n">T</span> <span class="o">&</span><span class="n">value</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="n">__builtin_addressof</span><span class="p">(</span><span class="n">value</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="builtin-operator-new-and-builtin-operator-delete">
+<h3><tt class="docutils literal"><span class="pre">__builtin_operator_new</span></tt> and <tt class="docutils literal"><span class="pre">__builtin_operator_delete</span></tt><a class="headerlink" href="#builtin-operator-new-and-builtin-operator-delete" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">__builtin_operator_new</span></tt> allocates memory just like a non-placement non-class
+<em>new-expression</em>. This is exactly like directly calling the normal
+non-placement <tt class="docutils literal"><span class="pre">::operator</span> <span class="pre">new</span></tt>, except that it allows certain optimizations
+that the C++ standard does not permit for a direct function call to
+<tt class="docutils literal"><span class="pre">::operator</span> <span class="pre">new</span></tt> (in particular, removing <tt class="docutils literal"><span class="pre">new</span></tt> / <tt class="docutils literal"><span class="pre">delete</span></tt> pairs and
+merging allocations).</p>
+<p>Likewise, <tt class="docutils literal"><span class="pre">__builtin_operator_delete</span></tt> deallocates memory just like a
+non-class <em>delete-expression</em>, and is exactly like directly calling the normal
+<tt class="docutils literal"><span class="pre">::operator</span> <span class="pre">delete</span></tt>, except that it permits optimizations. Only the unsized
+form of <tt class="docutils literal"><span class="pre">__builtin_operator_delete</span></tt> is currently available.</p>
+<p>These builtins are intended for use in the implementation of <tt class="docutils literal"><span class="pre">std::allocator</span></tt>
+and other similar allocation libraries, and are only available in C++.</p>
+</div>
+<div class="section" id="multiprecision-arithmetic-builtins">
+<h3>Multiprecision Arithmetic Builtins<a class="headerlink" href="#multiprecision-arithmetic-builtins" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides a set of builtins which expose multiprecision arithmetic in a
+manner amenable to C. They all have the following form:</p>
+<div class="highlight-c"><div class="highlight"><pre><span class="kt">unsigned</span> <span class="n">x</span> <span class="o">=</span> <span class="p">...,</span> <span class="n">y</span> <span class="o">=</span> <span class="p">...,</span> <span class="n">carryin</span> <span class="o">=</span> <span class="p">...,</span> <span class="n">carryout</span><span class="p">;</span>
+<span class="kt">unsigned</span> <span class="n">sum</span> <span class="o">=</span> <span class="n">__builtin_addc</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">carryin</span><span class="p">,</span> <span class="o">&</span><span class="n">carryout</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>Thus one can form a multiprecision addition chain in the following manner:</p>
+<div class="highlight-c"><div class="highlight"><pre><span class="kt">unsigned</span> <span class="o">*</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">y</span><span class="p">,</span> <span class="o">*</span><span class="n">z</span><span class="p">,</span> <span class="n">carryin</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">carryout</span><span class="p">;</span>
+<span class="n">z</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">__builtin_addc</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">carryin</span><span class="p">,</span> <span class="o">&</span><span class="n">carryout</span><span class="p">);</span>
+<span class="n">carryin</span> <span class="o">=</span> <span class="n">carryout</span><span class="p">;</span>
+<span class="n">z</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">__builtin_addc</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">carryin</span><span class="p">,</span> <span class="o">&</span><span class="n">carryout</span><span class="p">);</span>
+<span class="n">carryin</span> <span class="o">=</span> <span class="n">carryout</span><span class="p">;</span>
+<span class="n">z</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">__builtin_addc</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">carryin</span><span class="p">,</span> <span class="o">&</span><span class="n">carryout</span><span class="p">);</span>
+<span class="n">carryin</span> <span class="o">=</span> <span class="n">carryout</span><span class="p">;</span>
+<span class="n">z</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">__builtin_addc</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">y</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">carryin</span><span class="p">,</span> <span class="o">&</span><span class="n">carryout</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>The complete list of builtins are:</p>
+<div class="highlight-c"><div class="highlight"><pre><span class="kt">unsigned</span> <span class="kt">char</span>      <span class="nf">__builtin_addcb</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">short</span>     <span class="nf">__builtin_addcs</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">short</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span>           <span class="nf">__builtin_addc</span>  <span class="p">(</span><span class="kt">unsigned</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">long</span>      <span class="nf">__builtin_addcl</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="nf">__builtin_addcll</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">char</span>      <span class="nf">__builtin_subcb</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">short</span>     <span class="nf">__builtin_subcs</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">short</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">short</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span>           <span class="nf">__builtin_subc</span>  <span class="p">(</span><span class="kt">unsigned</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">long</span>      <span class="nf">__builtin_subcl</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+<span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="nf">__builtin_subcll</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">carryin</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">carryout</span><span class="p">);</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="checked-arithmetic-builtins">
+<h3>Checked Arithmetic Builtins<a class="headerlink" href="#checked-arithmetic-builtins" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides a set of builtins that implement checked arithmetic for security
+critical applications in a manner that is fast and easily expressable in C. As
+an example of their usage:</p>
+<div class="highlight-c"><div class="highlight"><pre><span class="kt">errorcode_t</span> <span class="nf">security_critical_application</span><span class="p">(...)</span> <span class="p">{</span>
+  <span class="kt">unsigned</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">result</span><span class="p">;</span>
+  <span class="p">...</span>
+  <span class="k">if</span> <span class="p">(</span><span class="n">__builtin_umul_overflow</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">&</span><span class="n">result</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">kErrorCodeHackers</span><span class="p">;</span>
+  <span class="p">...</span>
+  <span class="n">use_multiply</span><span class="p">(</span><span class="n">result</span><span class="p">);</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>A complete enumeration of the builtins are:</p>
+<div class="highlight-c"><div class="highlight"><pre><span class="kt">bool</span> <span class="nf">__builtin_uadd_overflow</span>  <span class="p">(</span><span class="kt">unsigned</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="o">*</span><span class="n">sum</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_uaddl_overflow</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="o">*</span><span class="n">sum</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_uaddll_overflow</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">sum</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_usub_overflow</span>  <span class="p">(</span><span class="kt">unsigned</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="o">*</span><span class="n">diff</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_usubl_overflow</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="o">*</span><span class="n">diff</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_usubll_overflow</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">diff</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_umul_overflow</span>  <span class="p">(</span><span class="kt">unsigned</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="o">*</span><span class="n">prod</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_umull_overflow</span> <span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="o">*</span><span class="n">prod</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_umulll_overflow</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">prod</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_sadd_overflow</span>  <span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">sum</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_saddl_overflow</span> <span class="p">(</span><span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">long</span> <span class="o">*</span><span class="n">sum</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_saddll_overflow</span><span class="p">(</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">sum</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_ssub_overflow</span>  <span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">diff</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_ssubl_overflow</span> <span class="p">(</span><span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">long</span> <span class="o">*</span><span class="n">diff</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_ssubll_overflow</span><span class="p">(</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">diff</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_smul_overflow</span>  <span class="p">(</span><span class="kt">int</span> <span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">y</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">prod</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_smull_overflow</span> <span class="p">(</span><span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">long</span> <span class="o">*</span><span class="n">prod</span><span class="p">);</span>
+<span class="kt">bool</span> <span class="nf">__builtin_smulll_overflow</span><span class="p">(</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">x</span><span class="p">,</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">y</span><span class="p">,</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">*</span><span class="n">prod</span><span class="p">);</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="c11-atomic-builtins">
+<span id="langext-c11-atomic"></span><h3>__c11_atomic builtins<a class="headerlink" href="#c11-atomic-builtins" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides a set of builtins which are intended to be used to implement
+C11’s <tt class="docutils literal"><span class="pre"><stdatomic.h></span></tt> header.  These builtins provide the semantics of the
+<tt class="docutils literal"><span class="pre">_explicit</span></tt> form of the corresponding C11 operation, and are named with a
+<tt class="docutils literal"><span class="pre">__c11_</span></tt> prefix.  The supported operations, and the differences from
+the corresponding C11 operations, are:</p>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_init</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_thread_fence</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_signal_fence</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_is_lock_free</span></tt> (The argument is the size of the
+<tt class="docutils literal"><span class="pre">_Atomic(...)</span></tt> object, instead of its address)</li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_store</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_load</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_exchange</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_compare_exchange_strong</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_compare_exchange_weak</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_fetch_add</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_fetch_sub</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_fetch_and</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_fetch_or</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">__c11_atomic_fetch_xor</span></tt></li>
+</ul>
+<p>The macros <tt class="docutils literal"><span class="pre">__ATOMIC_RELAXED</span></tt>, <tt class="docutils literal"><span class="pre">__ATOMIC_CONSUME</span></tt>, <tt class="docutils literal"><span class="pre">__ATOMIC_ACQUIRE</span></tt>,
+<tt class="docutils literal"><span class="pre">__ATOMIC_RELEASE</span></tt>, <tt class="docutils literal"><span class="pre">__ATOMIC_ACQ_REL</span></tt>, and <tt class="docutils literal"><span class="pre">__ATOMIC_SEQ_CST</span></tt> are
+provided, with values corresponding to the enumerators of C11’s
+<tt class="docutils literal"><span class="pre">memory_order</span></tt> enumeration.</p>
+</div>
+<div class="section" id="low-level-arm-exclusive-memory-builtins">
+<h3>Low-level ARM exclusive memory builtins<a class="headerlink" href="#low-level-arm-exclusive-memory-builtins" title="Permalink to this headline">¶</a></h3>
+<p>Clang provides overloaded builtins giving direct access to the three key ARM
+instructions for implementing atomic operations.</p>
+<div class="highlight-c"><div class="highlight"><pre><span class="n">T</span> <span class="nf">__builtin_arm_ldrex</span><span class="p">(</span><span class="k">const</span> <span class="k">volatile</span> <span class="n">T</span> <span class="o">*</span><span class="n">addr</span><span class="p">);</span>
+<span class="n">T</span> <span class="nf">__builtin_arm_ldaex</span><span class="p">(</span><span class="k">const</span> <span class="k">volatile</span> <span class="n">T</span> <span class="o">*</span><span class="n">addr</span><span class="p">);</span>
+<span class="kt">int</span> <span class="nf">__builtin_arm_strex</span><span class="p">(</span><span class="n">T</span> <span class="n">val</span><span class="p">,</span> <span class="k">volatile</span> <span class="n">T</span> <span class="o">*</span><span class="n">addr</span><span class="p">);</span>
+<span class="kt">int</span> <span class="nf">__builtin_arm_stlex</span><span class="p">(</span><span class="n">T</span> <span class="n">val</span><span class="p">,</span> <span class="k">volatile</span> <span class="n">T</span> <span class="o">*</span><span class="n">addr</span><span class="p">);</span>
+<span class="kt">void</span> <span class="nf">__builtin_arm_clrex</span><span class="p">(</span><span class="kt">void</span><span class="p">);</span>
+</pre></div>
+</div>
+<p>The types <tt class="docutils literal"><span class="pre">T</span></tt> currently supported are:
+* Integer types with width at most 64 bits (or 128 bits on AArch64).
+* Floating-point types
+* Pointer types.</p>
+<p>Note that the compiler does not guarantee it will not insert stores which clear
+the exclusive monitor in between an <tt class="docutils literal"><span class="pre">ldrex</span></tt> type operation and its paired
+<tt class="docutils literal"><span class="pre">strex</span></tt>. In practice this is only usually a risk when the extra store is on
+the same cache line as the variable being modified and Clang will only insert
+stack stores on its own, so it is best not to use these operations on variables
+with automatic storage duration.</p>
+<p>Also, loads and stores may be implicit in code written between the <tt class="docutils literal"><span class="pre">ldrex</span></tt> and
+<tt class="docutils literal"><span class="pre">strex</span></tt>. Clang will not necessarily mitigate the effects of these either, so
+care should be exercised.</p>
+<p>For these reasons the higher level atomic primitives should be preferred where
+possible.</p>
+</div>
+</div>
+<div class="section" id="non-standard-c-11-attributes">
+<h2><a class="toc-backref" href="#id15">Non-standard C++11 Attributes</a><a class="headerlink" href="#non-standard-c-11-attributes" title="Permalink to this headline">¶</a></h2>
+<p>Clang’s non-standard C++11 attributes live in the <tt class="docutils literal"><span class="pre">clang</span></tt> attribute
+namespace.</p>
+<p>Clang supports GCC’s <tt class="docutils literal"><span class="pre">gnu</span></tt> attribute namespace. All GCC attributes which
+are accepted with the <tt class="docutils literal"><span class="pre">__attribute__((foo))</span></tt> syntax are also accepted as
+<tt class="docutils literal"><span class="pre">[[gnu::foo]]</span></tt>. This only extends to attributes which are specified by GCC
+(see the list of <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__gcc.gnu.org_onlinedocs_gcc_Function-2DAttributes.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=R7uPzJw-QoZ8XPcj0yHY95PVLr7yjblSwIFPprYbs8I&e=">GCC function attributes</a>, <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__gcc.gnu.org_onlinedocs_gcc_Variable-2DAttributes.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=irLt2fegyJWhkF_5hO2pk1qluj774TI-ecCV_-sFQPI&e=">GCC variable
+attributes</a>, and
+<a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__gcc.gnu.org_onlinedocs_gcc_Type-2DAttributes.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=gGH_yXecmI_UfZMTOzdcBGQ99Cu0zWRSQ-OmbadiGF0&e=">GCC type attributes</a>). As with the GCC
+implementation, these attributes must appertain to the <em>declarator-id</em> in a
+declaration, which means they must go either at the start of the declaration or
+immediately after the name being declared.</p>
+<p>For example, this applies the GNU <tt class="docutils literal"><span class="pre">unused</span></tt> attribute to <tt class="docutils literal"><span class="pre">a</span></tt> and <tt class="docutils literal"><span class="pre">f</span></tt>, and
+also applies the GNU <tt class="docutils literal"><span class="pre">noreturn</span></tt> attribute to <tt class="docutils literal"><span class="pre">f</span></tt>.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="p">[[</span><span class="n">gnu</span><span class="o">::</span><span class="n">unused</span><span class="p">]]</span> <span class="kt">int</span> <span class="n">a</span><span class="p">,</span> <span class="n">f</span> <span class="p">[[</span><span class="n">gnu</span><span class="o">::</span><span class="n">noreturn</span><span class="p">]]</span> <span class="p">();</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="target-specific-extensions">
+<h2><a class="toc-backref" href="#id16">Target-Specific Extensions</a><a class="headerlink" href="#target-specific-extensions" title="Permalink to this headline">¶</a></h2>
+<p>Clang supports some language features conditionally on some targets.</p>
+<div class="section" id="arm-aarch64-language-extensions">
+<h3>ARM/AArch64 Language Extensions<a class="headerlink" href="#arm-aarch64-language-extensions" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="memory-barrier-intrinsics">
+<h4>Memory Barrier Intrinsics<a class="headerlink" href="#memory-barrier-intrinsics" title="Permalink to this headline">¶</a></h4>
+<p>Clang implements the <tt class="docutils literal"><span class="pre">__dmb</span></tt>, <tt class="docutils literal"><span class="pre">__dsb</span></tt> and <tt class="docutils literal"><span class="pre">__isb</span></tt> intrinsics as defined
+in the <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__infocenter.arm.com_help_topic_com.arm.doc.ihi0053c_IHI0053C-5Facle-5F2-5F0.pdf&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=tGdfnBE482Qpkm6kIXBLuykPDjz7m6SG0PtRD1lZeyY&e=">ARM C Language Extensions Release 2.0</a>.
+Note that these intrinsics are implemented as motion barriers that block
+reordering of memory accesses and side effect instructions. Other instructions
+like simple arithmatic may be reordered around the intrinsic. If you expect to
+have no reordering at all, use inline assembly instead.</p>
+</div>
+</div>
+<div class="section" id="x86-x86-64-language-extensions">
+<h3>X86/X86-64 Language Extensions<a class="headerlink" href="#x86-x86-64-language-extensions" title="Permalink to this headline">¶</a></h3>
+<p>The X86 backend has these language extensions:</p>
+<div class="section" id="memory-references-off-the-gs-segment">
+<h4>Memory references off the GS segment<a class="headerlink" href="#memory-references-off-the-gs-segment" title="Permalink to this headline">¶</a></h4>
+<p>Annotating a pointer with address space #256 causes it to be code generated
+relative to the X86 GS segment register, and address space #257 causes it to be
+relative to the X86 FS segment.  Note that this is a very very low-level
+feature that should only be used if you know what you’re doing (for example in
+an OS kernel).</p>
+<p>Here is an example:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#define GS_RELATIVE __attribute__((address_space(256)))</span>
+<span class="kt">int</span> <span class="nf">foo</span><span class="p">(</span><span class="kt">int</span> <span class="n">GS_RELATIVE</span> <span class="o">*</span><span class="n">P</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="o">*</span><span class="n">P</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Which compiles to (on X86-32):</p>
+<div class="highlight-gas"><div class="highlight"><pre><span class="nl">_foo:</span>
+        <span class="nf">movl</span>    <span class="mi">4</span><span class="p">(</span><span class="nv">%esp</span><span class="p">),</span> <span class="nv">%eax</span>
+        <span class="nf">movl</span>    <span class="nv">%gs</span><span class="p">:(</span><span class="nv">%eax</span><span class="p">),</span> <span class="nv">%eax</span>
+        <span class="nf">ret</span>
+</pre></div>
+</div>
+</div>
+</div>
+</div>
+<div class="section" id="extensions-for-static-analysis">
+<h2><a class="toc-backref" href="#id17">Extensions for Static Analysis</a><a class="headerlink" href="#extensions-for-static-analysis" title="Permalink to this headline">¶</a></h2>
+<p>Clang supports additional attributes that are useful for documenting program
+invariants and rules for static analysis tools, such as the <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang-2Danalyzer.llvm.org_&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=H3X-BHL9shrV_A0uBSj49eFZnCBM9LDDpsYH7Z5A9OM&e=">Clang Static
+Analyzer</a>. These attributes are documented
+in the analyzer’s <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang-2Danalyzer.llvm.org_annotations.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=b2ywZfOF96FE3EqgB8_wJCHSl3JGmpqiSrirKT6iiYc&e=">list of source-level annotations</a>.</p>
+</div>
+<div class="section" id="extensions-for-dynamic-analysis">
+<h2><a class="toc-backref" href="#id18">Extensions for Dynamic Analysis</a><a class="headerlink" href="#extensions-for-dynamic-analysis" title="Permalink to this headline">¶</a></h2>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(address_sanitizer)</span></tt> to check if the code is being built
+with <a class="reference internal" href="AddressSanitizer.html"><em>AddressSanitizer</em></a>.</p>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(thread_sanitizer)</span></tt> to check if the code is being built
+with <a class="reference internal" href="ThreadSanitizer.html"><em>ThreadSanitizer</em></a>.</p>
+<p>Use <tt class="docutils literal"><span class="pre">__has_feature(memory_sanitizer)</span></tt> to check if the code is being built
+with <a class="reference internal" href="MemorySanitizer.html"><em>MemorySanitizer</em></a>.</p>
+</div>
+<div class="section" id="extensions-for-selectively-disabling-optimization">
+<h2><a class="toc-backref" href="#id19">Extensions for selectively disabling optimization</a><a class="headerlink" href="#extensions-for-selectively-disabling-optimization" title="Permalink to this headline">¶</a></h2>
+<p>Clang provides a mechanism for selectively disabling optimizations in functions
+and methods.</p>
+<p>To disable optimizations in a single function definition, the GNU-style or C++11
+non-standard attribute <tt class="docutils literal"><span class="pre">optnone</span></tt> can be used.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="c1">// The following functions will not be optimized.</span>
+<span class="c1">// GNU-style attribute</span>
+<span class="n">__attribute__</span><span class="p">((</span><span class="n">optnone</span><span class="p">))</span> <span class="kt">int</span> <span class="n">foo</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// ... code</span>
+<span class="p">}</span>
+<span class="c1">// C++11 attribute</span>
+<span class="p">[[</span><span class="n">clang</span><span class="o">::</span><span class="n">optnone</span><span class="p">]]</span> <span class="kt">int</span> <span class="n">bar</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// ... code</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>To facilitate disabling optimization for a range of function definitions, a
+range-based pragma is provided. Its syntax is <tt class="docutils literal"><span class="pre">#pragma</span> <span class="pre">clang</span> <span class="pre">optimize</span></tt>
+followed by <tt class="docutils literal"><span class="pre">off</span></tt> or <tt class="docutils literal"><span class="pre">on</span></tt>.</p>
+<p>All function definitions in the region between an <tt class="docutils literal"><span class="pre">off</span></tt> and the following
+<tt class="docutils literal"><span class="pre">on</span></tt> will be decorated with the <tt class="docutils literal"><span class="pre">optnone</span></tt> attribute unless doing so would
+conflict with explicit attributes already present on the function (e.g. the
+ones that control inlining).</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#pragma clang optimize off</span>
+<span class="c1">// This function will be decorated with optnone.</span>
+<span class="kt">int</span> <span class="nf">foo</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// ... code</span>
+<span class="p">}</span>
+
+<span class="c1">// optnone conflicts with always_inline, so bar() will not be decorated.</span>
+<span class="n">__attribute__</span><span class="p">((</span><span class="n">always_inline</span><span class="p">))</span> <span class="kt">int</span> <span class="n">bar</span><span class="p">()</span> <span class="p">{</span>
+  <span class="c1">// ... code</span>
+<span class="p">}</span>
+<span class="cp">#pragma clang optimize on</span>
+</pre></div>
+</div>
+<p>If no <tt class="docutils literal"><span class="pre">on</span></tt> is found to close an <tt class="docutils literal"><span class="pre">off</span></tt> region, the end of the region is the
+end of the compilation unit.</p>
+<p>Note that a stray <tt class="docutils literal"><span class="pre">#pragma</span> <span class="pre">clang</span> <span class="pre">optimize</span> <span class="pre">on</span></tt> does not selectively enable
+additional optimizations when compiling at low optimization levels. This feature
+can only be used to selectively disable optimizations.</p>
+<p>The pragma has an effect on functions only at the point of their definition; for
+function templates, this means that the state of the pragma at the point of an
+instantiation is not necessarily relevant. Consider the following example:</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="k">template</span><span class="o"><</span><span class="k">typename</span> <span class="n">T</span><span class="o">></span> <span class="n">T</span> <span class="n">twice</span><span class="p">(</span><span class="n">T</span> <span class="n">t</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">t</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="cp">#pragma clang optimize off</span>
+<span class="k">template</span><span class="o"><</span><span class="k">typename</span> <span class="n">T</span><span class="o">></span> <span class="n">T</span> <span class="n">thrice</span><span class="p">(</span><span class="n">T</span> <span class="n">t</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">t</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="kt">int</span> <span class="n">container</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span> <span class="kt">int</span> <span class="n">b</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">return</span> <span class="n">twice</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">+</span> <span class="n">thrice</span><span class="p">(</span><span class="n">b</span><span class="p">);</span>
+<span class="p">}</span>
+<span class="cp">#pragma clang optimize on</span>
+</pre></div>
+</div>
+<p>In this example, the definition of the template function <tt class="docutils literal"><span class="pre">twice</span></tt> is outside
+the pragma region, whereas the definition of <tt class="docutils literal"><span class="pre">thrice</span></tt> is inside the region.
+The <tt class="docutils literal"><span class="pre">container</span></tt> function is also in the region and will not be optimized, but
+it causes the instantiation of <tt class="docutils literal"><span class="pre">twice</span></tt> and <tt class="docutils literal"><span class="pre">thrice</span></tt> with an <tt class="docutils literal"><span class="pre">int</span></tt> type; of
+these two instantiations, <tt class="docutils literal"><span class="pre">twice</span></tt> will be optimized (because its definition
+was outside the region) and <tt class="docutils literal"><span class="pre">thrice</span></tt> will not be optimized.</p>
+</div>
+<div class="section" id="extensions-for-loop-hint-optimizations">
+<h2><a class="toc-backref" href="#id20">Extensions for loop hint optimizations</a><a class="headerlink" href="#extensions-for-loop-hint-optimizations" title="Permalink to this headline">¶</a></h2>
+<p>The <tt class="docutils literal"><span class="pre">#pragma</span> <span class="pre">clang</span> <span class="pre">loop</span></tt> directive is used to specify hints for optimizing the
+subsequent for, while, do-while, or c++11 range-based for loop. The directive
+provides options for vectorization, interleaving, and unrolling. Loop hints can
+be specified before any loop and will be ignored if the optimization is not safe
+to apply.</p>
+<div class="section" id="vectorization-and-interleaving">
+<h3>Vectorization and Interleaving<a class="headerlink" href="#vectorization-and-interleaving" title="Permalink to this headline">¶</a></h3>
+<p>A vectorized loop performs multiple iterations of the original loop
+in parallel using vector instructions. The instruction set of the target
+processor determines which vector instructions are available and their vector
+widths. This restricts the types of loops that can be vectorized. The vectorizer
+automatically determines if the loop is safe and profitable to vectorize. A
+vector instruction cost model is used to select the vector width.</p>
+<p>Interleaving multiple loop iterations allows modern processors to further
+improve instruction-level parallelism (ILP) using advanced hardware features,
+such as multiple execution units and out-of-order execution. The vectorizer uses
+a cost model that depends on the register pressure and generated code size to
+select the interleaving count.</p>
+<p>Vectorization is enabled by <tt class="docutils literal"><span class="pre">vectorize(enable)</span></tt> and interleaving is enabled
+by <tt class="docutils literal"><span class="pre">interleave(enable)</span></tt>. This is useful when compiling with <tt class="docutils literal"><span class="pre">-Os</span></tt> to
+manually enable vectorization or interleaving.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#pragma clang loop vectorize(enable)</span>
+<span class="cp">#pragma clang loop interleave(enable)</span>
+<span class="k">for</span><span class="p">(...)</span> <span class="p">{</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>The vector width is specified by <tt class="docutils literal"><span class="pre">vectorize_width(_value_)</span></tt> and the interleave
+count is specified by <tt class="docutils literal"><span class="pre">interleave_count(_value_)</span></tt>, where
+_value_ is a positive integer. This is useful for specifying the optimal
+width/count of the set of target architectures supported by your application.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#pragma clang loop vectorize_width(2)</span>
+<span class="cp">#pragma clang loop interleave_count(2)</span>
+<span class="k">for</span><span class="p">(...)</span> <span class="p">{</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Specifying a width/count of 1 disables the optimization, and is equivalent to
+<tt class="docutils literal"><span class="pre">vectorize(disable)</span></tt> or <tt class="docutils literal"><span class="pre">interleave(disable)</span></tt>.</p>
+</div>
+<div class="section" id="loop-unrolling">
+<h3>Loop Unrolling<a class="headerlink" href="#loop-unrolling" title="Permalink to this headline">¶</a></h3>
+<p>Unrolling a loop reduces the loop control overhead and exposes more
+opportunities for ILP. Loops can be fully or partially unrolled. Full unrolling
+eliminates the loop and replaces it with an enumerated sequence of loop
+iterations. Full unrolling is only possible if the loop trip count is known at
+compile time. Partial unrolling replicates the loop body within the loop and
+reduces the trip count.</p>
+<p>If <tt class="docutils literal"><span class="pre">unroll(full)</span></tt> is specified the unroller will attempt to fully unroll the
+loop if the trip count is known at compile time. If the loop count is not known
+or the fully unrolled code size is greater than the limit specified by the
+<cite>-pragma-unroll-threshold</cite> command line option the loop will be partially
+unrolled subject to the same limit.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#pragma clang loop unroll(full)</span>
+<span class="k">for</span><span class="p">(...)</span> <span class="p">{</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>The unroll count can be specified explicitly with <tt class="docutils literal"><span class="pre">unroll_count(_value_)</span></tt> where
+_value_ is a positive integer. If this value is greater than the trip count the
+loop will be fully unrolled. Otherwise the loop is partially unrolled subject
+to the <cite>-pragma-unroll-threshold</cite> limit.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#pragma clang loop unroll_count(8)</span>
+<span class="k">for</span><span class="p">(...)</span> <span class="p">{</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Unrolling of a loop can be prevented by specifying <tt class="docutils literal"><span class="pre">unroll(disable)</span></tt>.</p>
+</div>
+<div class="section" id="additional-information">
+<h3>Additional Information<a class="headerlink" href="#additional-information" title="Permalink to this headline">¶</a></h3>
+<p>For convenience multiple loop hints can be specified on a single line.</p>
+<div class="highlight-c++"><div class="highlight"><pre><span class="cp">#pragma clang loop vectorize_width(4) interleave_count(8)</span>
+<span class="k">for</span><span class="p">(...)</span> <span class="p">{</span>
+  <span class="p">...</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>If an optimization cannot be applied any hints that apply to it will be ignored.
+For example, the hint <tt class="docutils literal"><span class="pre">vectorize_width(4)</span></tt> is ignored if the loop is not
+proven safe to vectorize. To identify and diagnose optimization issues use
+<cite>-Rpass</cite>, <cite>-Rpass-missed</cite>, and <cite>-Rpass-analysis</cite> command line options. See the
+user guide for details.</p>
+</div>
+</div>
+</div>
+
+
+      </div>
+      <div class="bottomnav">
+      
+        <p>
+        «  <a href="UsersManual.html">Clang Compiler User’s Manual</a>
+          ::  
+        <a class="uplink" href="index.html">Contents</a>
+          ::  
+        <a href="ObjectiveCLiterals.html">Objective-C Literals</a>  Â»
+        </p>
+
+      </div>
+
+    <div class="footer">
+        © Copyright 2007-2014, The Clang Team.
+      Created using <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sphinx.pocoo.org_&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=t8g06IJMGzvs6oqx32B41Hx2souTee1_X6WsQFAzgns&e=">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/3.6.1/tools/clang/docs/LeakSanitizer.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.6.1/tools/clang/docs/LeakSanitizer.html?rev=238136&view=auto
==============================================================================
--- www-releases/trunk/3.6.1/tools/clang/docs/LeakSanitizer.html (added)
+++ www-releases/trunk/3.6.1/tools/clang/docs/LeakSanitizer.html Mon May 25 08:58:01 2015
@@ -0,0 +1,103 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>LeakSanitizer — Clang 3.6 documentation</title>
+    
+    <link rel="stylesheet" href="_static/haiku.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    <link rel="stylesheet" href="_static/print.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '',
+        VERSION:     '3.6',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+    <script type="text/javascript" src="_static/theme_extras.js"></script>
+    <link rel="top" title="Clang 3.6 documentation" href="index.html" />
+    <link rel="next" title="Sanitizer special case list" href="SanitizerSpecialCaseList.html" />
+    <link rel="prev" title="DataFlowSanitizer Design Document" href="DataFlowSanitizerDesign.html" /> 
+  </head>
+  <body>
+      <div class="header"><h1 class="heading"><a href="index.html">
+          <span>Clang 3.6 documentation</span></a></h1>
+        <h2 class="heading"><span>LeakSanitizer</span></h2>
+      </div>
+      <div class="topnav">
+      
+        <p>
+        «  <a href="DataFlowSanitizerDesign.html">DataFlowSanitizer Design Document</a>
+          ::  
+        <a class="uplink" href="index.html">Contents</a>
+          ::  
+        <a href="SanitizerSpecialCaseList.html">Sanitizer special case list</a>  Â»
+        </p>
+
+      </div>
+      <div class="content">
+        
+        
+  <div class="section" id="leaksanitizer">
+<h1>LeakSanitizer<a class="headerlink" href="#leaksanitizer" title="Permalink to this headline">¶</a></h1>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li>
+<li><a class="reference internal" href="#current-status" id="id2">Current status</a></li>
+<li><a class="reference internal" href="#more-information" id="id3">More Information</a></li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h2><a class="toc-backref" href="#id1">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
+<p>LeakSanitizer is a run-time memory leak detector. It can be combined with
+<a class="reference internal" href="AddressSanitizer.html"><em>AddressSanitizer</em></a> to get both memory error and leak detection.
+LeakSanitizer does not introduce any additional slowdown when used in this mode.
+The LeakSanitizer runtime can also be linked in separately to get leak detection
+only, at a minimal performance cost.</p>
+</div>
+<div class="section" id="current-status">
+<h2><a class="toc-backref" href="#id2">Current status</a><a class="headerlink" href="#current-status" title="Permalink to this headline">¶</a></h2>
+<p>LeakSanitizer is experimental and supported only on x86_64 Linux.</p>
+<p>The combined mode has been tested on fairly large software projects. The
+stand-alone mode has received much less testing.</p>
+<p>There are plans to support LeakSanitizer in <a class="reference internal" href="MemorySanitizer.html"><em>MemorySanitizer</em></a> builds.</p>
+</div>
+<div class="section" id="more-information">
+<h2><a class="toc-backref" href="#id3">More Information</a><a class="headerlink" href="#more-information" title="Permalink to this headline">¶</a></h2>
+<p><a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=https-3A__code.google.com_p_address-2Dsanitizer_wiki_LeakSanitizer&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=gnWnFPDYP9Cow_ynvbsNNC9vGQgVKTdY4xHbygD4qQw&e=">https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer</a></p>
+</div>
+</div>
+
+
+      </div>
+      <div class="bottomnav">
+      
+        <p>
+        «  <a href="DataFlowSanitizerDesign.html">DataFlowSanitizer Design Document</a>
+          ::  
+        <a class="uplink" href="index.html">Contents</a>
+          ::  
+        <a href="SanitizerSpecialCaseList.html">Sanitizer special case list</a>  Â»
+        </p>
+
+      </div>
+
+    <div class="footer">
+        © Copyright 2007-2014, The Clang Team.
+      Created using <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sphinx.pocoo.org_&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=t8g06IJMGzvs6oqx32B41Hx2souTee1_X6WsQFAzgns&e=">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchers.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchers.html?rev=238136&view=auto
==============================================================================
--- www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchers.html (added)
+++ www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchers.html Mon May 25 08:58:01 2015
@@ -0,0 +1,171 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Matching the Clang AST — Clang 3.6 documentation</title>
+    
+    <link rel="stylesheet" href="_static/haiku.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    <link rel="stylesheet" href="_static/print.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '',
+        VERSION:     '3.6',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+    <script type="text/javascript" src="_static/theme_extras.js"></script>
+    <link rel="top" title="Clang 3.6 documentation" href="index.html" />
+    <link rel="next" title="How To Setup Clang Tooling For LLVM" href="HowToSetupToolingForLLVM.html" />
+    <link rel="prev" title="Tutorial for building tools using LibTooling and LibASTMatchers" href="LibASTMatchersTutorial.html" /> 
+  </head>
+  <body>
+      <div class="header"><h1 class="heading"><a href="index.html">
+          <span>Clang 3.6 documentation</span></a></h1>
+        <h2 class="heading"><span>Matching the Clang AST</span></h2>
+      </div>
+      <div class="topnav">
+      
+        <p>
+        «  <a href="LibASTMatchersTutorial.html">Tutorial for building tools using LibTooling and LibASTMatchers</a>
+          ::  
+        <a class="uplink" href="index.html">Contents</a>
+          ::  
+        <a href="HowToSetupToolingForLLVM.html">How To Setup Clang Tooling For LLVM</a>  Â»
+        </p>
+
+      </div>
+      <div class="content">
+        
+        
+  <div class="section" id="matching-the-clang-ast">
+<h1>Matching the Clang AST<a class="headerlink" href="#matching-the-clang-ast" title="Permalink to this headline">¶</a></h1>
+<p>This document explains how to use Clang’s LibASTMatchers to match interesting
+nodes of the AST and execute code that uses the matched nodes.  Combined with
+<a class="reference internal" href="LibTooling.html"><em>LibTooling</em></a>, LibASTMatchers helps to write code-to-code transformation
+tools or query tools.</p>
+<p>We assume basic knowledge about the Clang AST.  See the <a class="reference internal" href="IntroductionToTheClangAST.html"><em>Introduction
+to the Clang AST</em></a> if you want to learn more
+about how the AST is structured.</p>
+<div class="section" id="introduction">
+<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
+<p>LibASTMatchers provides a domain specific language to create predicates on
+Clang’s AST.  This DSL is written in and can be used from C++, allowing users
+to write a single program to both match AST nodes and access the node’s C++
+interface to extract attributes, source locations, or any other information
+provided on the AST level.</p>
+<p>AST matchers are predicates on nodes in the AST.  Matchers are created by
+calling creator functions that allow building up a tree of matchers, where
+inner matchers are used to make the match more specific.</p>
+<p>For example, to create a matcher that matches all class or union declarations
+in the AST of a translation unit, you can call <a class="reference external" href="LibASTMatchersReference.html#recordDecl0Anchor">recordDecl()</a>.  To narrow the match down,
+for example to find all class or union declarations with the name “<tt class="docutils literal"><span class="pre">Foo</span></tt>”,
+insert a <a class="reference external" href="LibASTMatchersReference.html#hasName0Anchor">hasName</a> matcher: the
+call <tt class="docutils literal"><span class="pre">recordDecl(hasName("Foo"))</span></tt> returns a matcher that matches classes or
+unions that are named “<tt class="docutils literal"><span class="pre">Foo</span></tt>”, in any namespace.  By default, matchers that
+accept multiple inner matchers use an implicit <a class="reference external" href="LibASTMatchersReference.html#allOf0Anchor">allOf()</a>.  This allows further narrowing
+down the match, for example to match all classes that are derived from
+“<tt class="docutils literal"><span class="pre">Bar</span></tt>”: <tt class="docutils literal"><span class="pre">recordDecl(hasName("Foo"),</span> <span class="pre">isDerivedFrom("Bar"))</span></tt>.</p>
+</div>
+<div class="section" id="how-to-create-a-matcher">
+<h2>How to create a matcher<a class="headerlink" href="#how-to-create-a-matcher" title="Permalink to this headline">¶</a></h2>
+<p>With more than a thousand classes in the Clang AST, one can quickly get lost
+when trying to figure out how to create a matcher for a specific pattern.  This
+section will teach you how to use a rigorous step-by-step pattern to build the
+matcher you are interested in.  Note that there will always be matchers missing
+for some part of the AST.  See the section about <a class="reference internal" href="#astmatchers-writing"><em>how to write your own
+AST matchers</em></a> later in this document.</p>
+<p>The precondition to using the matchers is to understand how the AST for what you
+want to match looks like.  The
+<a class="reference internal" href="IntroductionToTheClangAST.html"><em>Introduction to the Clang AST</em></a> teaches you
+how to dump a translation unit’s AST into a human readable format.</p>
+<p>In general, the strategy to create the right matchers is:</p>
+<ol class="arabic simple">
+<li>Find the outermost class in Clang’s AST you want to match.</li>
+<li>Look at the <a class="reference external" href="LibASTMatchersReference.html">AST Matcher Reference</a> for
+matchers that either match the node you’re interested in or narrow down
+attributes on the node.</li>
+<li>Create your outer match expression.  Verify that it works as expected.</li>
+<li>Examine the matchers for what the next inner node you want to match is.</li>
+<li>Repeat until the matcher is finished.</li>
+</ol>
+</div>
+<div class="section" id="binding-nodes-in-match-expressions">
+<span id="astmatchers-bind"></span><h2>Binding nodes in match expressions<a class="headerlink" href="#binding-nodes-in-match-expressions" title="Permalink to this headline">¶</a></h2>
+<p>Matcher expressions allow you to specify which parts of the AST are interesting
+for a certain task.  Often you will want to then do something with the nodes
+that were matched, like building source code transformations.</p>
+<p>To that end, matchers that match specific AST nodes (so called node matchers)
+are bindable; for example, <tt class="docutils literal"><span class="pre">recordDecl(hasName("MyClass")).bind("id")</span></tt> will
+bind the matched <tt class="docutils literal"><span class="pre">recordDecl</span></tt> node to the string “<tt class="docutils literal"><span class="pre">id</span></tt>”, to be later
+retrieved in the <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ast-5F-5Fmatchers-5F1-5F1MatchFinder-5F1-5F1MatchCallback.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=urv0S1UXkGzO0-nuoVt0iFR_ua0UdPep0fOfHpcs-KM&e=">match callback</a>.</p>
+</div>
+<div class="section" id="writing-your-own-matchers">
+<h2>Writing your own matchers<a class="headerlink" href="#writing-your-own-matchers" title="Permalink to this headline">¶</a></h2>
+<p>There are multiple different ways to define a matcher, depending on its type
+and flexibility.</p>
+<div class="section" id="variadicdyncastallofmatcher-base-derived">
+<h3><tt class="docutils literal"><span class="pre">VariadicDynCastAllOfMatcher<Base,</span> <span class="pre">Derived></span></tt><a class="headerlink" href="#variadicdyncastallofmatcher-base-derived" title="Permalink to this headline">¶</a></h3>
+<p>Those match all nodes of type <em>Base</em> if they can be dynamically casted to
+<em>Derived</em>.  The names of those matchers are nouns, which closely resemble
+<em>Derived</em>.  <tt class="docutils literal"><span class="pre">VariadicDynCastAllOfMatchers</span></tt> are the backbone of the matcher
+hierarchy.  Most often, your match expression will start with one of them, and
+you can <a class="reference internal" href="#astmatchers-bind"><em>bind</em></a> the node they represent to ids for later
+processing.</p>
+<p><tt class="docutils literal"><span class="pre">VariadicDynCastAllOfMatchers</span></tt> are callable classes that model variadic
+template functions in C++03.  They take an aribtrary number of
+<tt class="docutils literal"><span class="pre">Matcher<Derived></span></tt> and return a <tt class="docutils literal"><span class="pre">Matcher<Base></span></tt>.</p>
+</div>
+<div class="section" id="ast-matcher-p-type-name-paramtype-param">
+<h3><tt class="docutils literal"><span class="pre">AST_MATCHER_P(Type,</span> <span class="pre">Name,</span> <span class="pre">ParamType,</span> <span class="pre">Param)</span></tt><a class="headerlink" href="#ast-matcher-p-type-name-paramtype-param" title="Permalink to this headline">¶</a></h3>
+<p>Most matcher definitions use the matcher creation macros.  Those define both
+the matcher of type <tt class="docutils literal"><span class="pre">Matcher<Type></span></tt> itself, and a matcher-creation function
+named <em>Name</em> that takes a parameter of type <em>ParamType</em> and returns the
+corresponding matcher.</p>
+<p>There are multiple matcher definition macros that deal with polymorphic return
+values and different parameter counts.  See <a class="reference external" href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_ASTMatchersMacros-5F8h.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=vL5SBJMdMO9dJYZTE14Pij2ZUYIygmWIV1DfxZdrNwE&e=">ASTMatchersMacros.h</a>.</p>
+</div>
+<div class="section" id="matcher-creation-functions">
+<span id="astmatchers-writing"></span><h3>Matcher creation functions<a class="headerlink" href="#matcher-creation-functions" title="Permalink to this headline">¶</a></h3>
+<p>Matchers are generated by nesting calls to matcher creation functions.  Most of
+the time those functions are either created by using
+<tt class="docutils literal"><span class="pre">VariadicDynCastAllOfMatcher</span></tt> or the matcher creation macros (see below).
+The free-standing functions are an indication that this matcher is just a
+combination of other matchers, as is for example the case with <a class="reference external" href="LibASTMatchersReference.html#callee1Anchor">callee</a>.</p>
+</div>
+</div>
+</div>
+
+
+      </div>
+      <div class="bottomnav">
+      
+        <p>
+        «  <a href="LibASTMatchersTutorial.html">Tutorial for building tools using LibTooling and LibASTMatchers</a>
+          ::  
+        <a class="uplink" href="index.html">Contents</a>
+          ::  
+        <a href="HowToSetupToolingForLLVM.html">How To Setup Clang Tooling For LLVM</a>  Â»
+        </p>
+
+      </div>
+
+    <div class="footer">
+        © Copyright 2007-2014, The Clang Team.
+      Created using <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__sphinx.pocoo.org_&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=t8g06IJMGzvs6oqx32B41Hx2souTee1_X6WsQFAzgns&e=">Sphinx</a> 1.1.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchersReference.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchersReference.html?rev=238136&view=auto
==============================================================================
--- www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchersReference.html (added)
+++ www-releases/trunk/3.6.1/tools/clang/docs/LibASTMatchersReference.html Mon May 25 08:58:01 2015
@@ -0,0 +1,4159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+          "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<title>AST Matcher Reference</title>
+<link type="text/css" rel="stylesheet" href="../menu.css" />
+<link type="text/css" rel="stylesheet" href="../content.css" />
+<style type="text/css">
+td {
+  padding: .33em;
+}
+td.doc {
+  display: none;
+  border-bottom: 1px solid black;
+}
+td.name:hover {
+  color: blue;
+  cursor: pointer;
+}
+</style>
+<script type="text/javascript">
+function toggle(id) {
+  if (!id) return;
+  row = document.getElementById(id);
+  if (row.style.display != 'table-cell')
+    row.style.display = 'table-cell';
+  else
+    row.style.display = 'none';
+}
+</script>
+</head>
+<body onLoad="toggle(location.hash.substring(1, location.hash.length - 6))">
+
+<!--#include virtual="../menu.html.incl"-->
+
+<div id="content">
+
+<h1>AST Matcher Reference</h1>
+
+<p>This document shows all currently implemented matchers. The matchers are grouped
+by category and node type they match. You can click on matcher names to show the
+matcher's source documentation.</p>
+
+<p>There are three different basic categories of matchers:
+<ul>
+<li><a href="#decl-matchers">Node Matchers:</a> Matchers that match a specific type of AST node.</li>
+<li><a href="#narrowing-matchers">Narrowing Matchers:</a> Matchers that match attributes on AST nodes.</li>
+<li><a href="#traversal-matchers">Traversal Matchers:</a> Matchers that allow traversal between AST nodes.</li>
+</ul>
+</p>
+
+<p>Within each category the matchers are ordered by node type they match on.
+Note that if a matcher can match multiple node types, it will it will appear
+multiple times. This means that by searching for Matcher<Stmt> you can
+find all matchers that can be used to match on Stmt nodes.</p>
+
+<p>The exception to that rule are matchers that can match on any node. Those
+are marked with a * and are listed in the beginning of each category.</p>
+
+<p>Note that the categorization of matchers is a great help when you combine
+them into matcher expressions. You will usually want to form matcher expressions
+that read like english sentences by alternating between node matchers and
+narrowing or traversal matchers, like this:
+<pre>
+recordDecl(hasDescendant(
+    ifStmt(hasTrueExpression(
+        expr(hasDescendant(
+            ifStmt()))))))
+</pre>
+</p>
+
+<!-- ======================================================================= -->
+<h2 id="decl-matchers">Node Matchers</h2>
+<!-- ======================================================================= -->
+
+<p>Node matchers are at the core of matcher expressions - they specify the type
+of node that is expected. Every match expression starts with a node matcher,
+which can then be further refined with a narrowing or traversal matcher. All
+traversal matchers take node matchers as their arguments.</p>
+
+<p>For convenience, all node matchers take an arbitrary number of arguments
+and implicitly act as allOf matchers.</p>
+
+<p>Node matchers are the only matchers that support the bind("id") call to
+bind the matched node to the given string, to be later retrieved from the
+match callback.</p>
+
+<p>It is important to remember that the arguments to node matchers are
+predicates on the same node, just with additional information about the type.
+This is often useful to make matcher expression more readable by inlining bind
+calls into redundant node matchers inside another node matcher:
+<pre>
+// This binds the CXXRecordDecl to "id", as the decl() matcher will stay on
+// the same node.
+recordDecl(decl().bind("id"), hasName("::MyClass"))
+</pre>
+</p>
+
+<table>
+<tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
+<!-- START_DECL_MATCHERS -->
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('ctorInitializer0')"><a name="ctorInitializer0Anchor">ctorInitializer</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="ctorInitializer0"><pre>Matches constructor initializers.
+
+Examples matches i(42).
+  class C {
+    C() : i(42) {}
+    int i;
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('accessSpecDecl0')"><a name="accessSpecDecl0Anchor">accessSpecDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AccessSpecDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=10ThboxIgG_LWWrgyq9VVjuVlehp9O6uulTB0vzAJNQ&e=">AccessSpecDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="accessSpecDecl0"><pre>Matches C++ access specifier declarations.
+
+Given
+  class C {
+  public:
+    int a;
+  };
+accessSpecDecl()
+  matches 'public:'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('classTemplateDecl0')"><a name="classTemplateDecl0Anchor">classTemplateDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ClassTemplateDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JoGxI6iMtLfqrPeuC-j4K7s0ximUq4ACo2yUaLF0ncY&e=">ClassTemplateDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="classTemplateDecl0"><pre>Matches C++ class template declarations.
+
+Example matches Z
+  template<class T> class Z {};
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('classTemplateSpecializationDecl0')"><a name="classTemplateSpecializationDecl0Anchor">classTemplateSpecializationDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ClassTemplateSpecializationDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=iich7Kuv3wmbxswgfACtBwW8s4624IIuhFHoZV_uYFU&e=">ClassTemplateSpecializationDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="classTemplateSpecializationDecl0"><pre>Matches C++ class template specializations.
+
+Given
+  template<typename T> class A {};
+  template<> class A<double> {};
+  A<int> a;
+classTemplateSpecializationDecl()
+  matches the specializations A<int> and A<double>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('constructorDecl0')"><a name="constructorDecl0Anchor">constructorDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructorDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=wdU4D0RLNlXeE4SqglJMkvak8Fqk4zuhYPZ3ObgDSFc&e=">CXXConstructorDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="constructorDecl0"><pre>Matches C++ constructor declarations.
+
+Example matches Foo::Foo() and Foo::Foo(int)
+  class Foo {
+   public:
+    Foo();
+    Foo(int);
+    int DoSomething();
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('decl0')"><a name="decl0Anchor">decl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="decl0"><pre>Matches declarations.
+
+Examples matches X, C, and the friend declaration inside C;
+  void X();
+  class C {
+    friend X;
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('declaratorDecl0')"><a name="declaratorDecl0Anchor">declaratorDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclaratorDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kEJjKd5CBpmheseILSyXT7zGrLJhbBOrpB09ECIotLo&e=">DeclaratorDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="declaratorDecl0"><pre>Matches declarator declarations (field, variable, function
+and non-type template parameter declarations).
+
+Given
+  class X { int y; };
+declaratorDecl()
+  matches int y.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('destructorDecl0')"><a name="destructorDecl0Anchor">destructorDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXDestructorDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kc2Y0pCFysRXfzxWtg-Q8b2guirFHXxiLw-6rg2Mfx4&e=">CXXDestructorDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="destructorDecl0"><pre>Matches explicit C++ destructor declarations.
+
+Example matches Foo::~Foo()
+  class Foo {
+   public:
+    virtual ~Foo();
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('enumConstantDecl0')"><a name="enumConstantDecl0Anchor">enumConstantDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumConstantDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=vtBNFyItIllhDlf10fNF0n3uEX-7rrKlN7IgVc_gsFg&e=">EnumConstantDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="enumConstantDecl0"><pre>Matches enum constants.
+
+Example matches A, B, C
+  enum X {
+    A, B, C
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('enumDecl0')"><a name="enumDecl0Anchor">enumDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r5Zdm7aqu4XSXPhcRNadu0SoTfmqSACyns9HYK27jpM&e=">EnumDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="enumDecl0"><pre>Matches enum declarations.
+
+Example matches X
+  enum X {
+    A, B, C
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('fieldDecl0')"><a name="fieldDecl0Anchor">fieldDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FieldDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cfh-ynUdPglaKoEExhLIATnM70Wa4o1pL_yyRTpDtNg&e=">FieldDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="fieldDecl0"><pre>Matches field declarations.
+
+Given
+  class X { int m; };
+fieldDecl()
+  matches 'm'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('friendDecl0')"><a name="friendDecl0Anchor">friendDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FriendDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ORj9exkAlPEaf7c1WIoN93-FtA5RzVo07XIDm5JUn8c&e=">FriendDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="friendDecl0"><pre>Matches friend declarations.
+
+Given
+  class X { friend void foo(); };
+friendDecl()
+  matches 'friend void foo()'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('functionDecl0')"><a name="functionDecl0Anchor">functionDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="functionDecl0"><pre>Matches function declarations.
+
+Example matches f
+  void f();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('functionTemplateDecl0')"><a name="functionTemplateDecl0Anchor">functionTemplateDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionTemplateDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=DWdm7VkUEBuiuqh37cmAzn7Du0207C3Ozm3b8GKz9Qs&e=">FunctionTemplateDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="functionTemplateDecl0"><pre>Matches C++ function template declarations.
+
+Example matches f
+  template<class T> void f(T t) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('linkageSpecDecl0')"><a name="linkageSpecDecl0Anchor">linkageSpecDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LinkageSpecDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WL2m3VNbMCybqQxtRNeW6DEMM4K-3d_Gg3GxifD_u1k&e=">LinkageSpecDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="linkageSpecDecl0"><pre>Matches a declaration of a linkage specification.
+
+Given
+  extern "C" {}
+linkageSpecDecl()
+  matches "extern "C" {}"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('methodDecl0')"><a name="methodDecl0Anchor">methodDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="methodDecl0"><pre>Matches method declarations.
+
+Example matches y
+  class X { void y(); };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('namedDecl0')"><a name="namedDecl0Anchor">namedDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamedDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sL6uAKZbbnobqmoPp-FyciHC0wE51_wpmfOcZ6g7OkY&e=">NamedDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="namedDecl0"><pre>Matches a declaration of anything that could have a name.
+
+Example matches X, S, the anonymous union type, i, and U;
+  typedef int X;
+  struct S {
+    union {
+      int i;
+    } U;
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('namespaceDecl0')"><a name="namespaceDecl0Anchor">namespaceDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamespaceDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=oNNR1jZ2ZvLe0efsOHb5brjhRKM0u6wE9aAgvToi9rg&e=">NamespaceDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="namespaceDecl0"><pre>Matches a declaration of a namespace.
+
+Given
+  namespace {}
+  namespace test {}
+namespaceDecl()
+  matches "namespace {}" and "namespace test {}"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('parmVarDecl0')"><a name="parmVarDecl0Anchor">parmVarDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ParmVarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=p3LpBJY86PMPMcgw06k3MnV7jf9CNnwBmRyMvCY4q5s&e=">ParmVarDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="parmVarDecl0"><pre>Matches parameter variable declarations.
+
+Given
+  void f(int x);
+parmVarDecl()
+  matches int x.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('recordDecl0')"><a name="recordDecl0Anchor">recordDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="recordDecl0"><pre>Matches C++ class declarations.
+
+Example matches X, Z
+  class X;
+  template<class T> class Z {};
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('typedefDecl0')"><a name="typedefDecl0Anchor">typedefDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=whzHKj_liBgknevGx9aOU2vEziVE3mFZLpIxuCk3Ljs&e=">TypedefDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="typedefDecl0"><pre>Matches typedef declarations.
+
+Given
+  typedef int X;
+typedefDecl()
+  matches "typedef int X"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('unresolvedUsingValueDecl0')"><a name="unresolvedUsingValueDecl0Anchor">unresolvedUsingValueDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingValueDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=-drKxT0bxBBPFvkc9xPYbIO9RaezX8qxhdVqmr7zS9Q&e=">UnresolvedUsingValueDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="unresolvedUsingValueDecl0"><pre>Matches unresolved using value declarations.
+
+Given
+  template<typename X>
+  class C : private X {
+    using X::x;
+  };
+unresolvedUsingValueDecl()
+  matches using X::x </pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('usingDecl0')"><a name="usingDecl0Anchor">usingDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UsingDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=DIkpWrNTD_jATNvrQhrWhvscGD9CNlj5jKlxVAhbvsw&e=">UsingDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="usingDecl0"><pre>Matches using declarations.
+
+Given
+  namespace X { int x; }
+  using X::x;
+usingDecl()
+  matches using X::x </pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('usingDirectiveDecl0')"><a name="usingDirectiveDecl0Anchor">usingDirectiveDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UsingDirectiveDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Xn9bcYok4UCa4g899rcloEtyFxUS16LqirS0v1FOQSQ&e=">UsingDirectiveDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="usingDirectiveDecl0"><pre>Matches using namespace declarations.
+
+Given
+  namespace X { int x; }
+  using namespace X;
+usingDirectiveDecl()
+  matches using namespace X </pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('valueDecl0')"><a name="valueDecl0Anchor">valueDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ValueDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0as-mngjnYGP2uK46qDI8e6pq8xtyQpIHSfrHl5jZWo&e=">ValueDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="valueDecl0"><pre>Matches any value declaration.
+
+Example matches A, B, C and F
+  enum X { A, B, C };
+  void F();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('varDecl0')"><a name="varDecl0Anchor">varDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="varDecl0"><pre>Matches variable declarations.
+
+Note: this does not match declarations of member variables, which are
+"field" declarations in Clang parlance.
+
+Example matches a
+  int a;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifierLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=skBxpi_uRcXg8seiRXHjN0zLoWLULHrLYE4O3iV3UkM&e=">NestedNameSpecifierLoc</a>></td><td class="name" onclick="toggle('nestedNameSpecifierLoc0')"><a name="nestedNameSpecifierLoc0Anchor">nestedNameSpecifierLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifierLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=skBxpi_uRcXg8seiRXHjN0zLoWLULHrLYE4O3iV3UkM&e=">NestedNameSpecifierLoc</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="nestedNameSpecifierLoc0"><pre>Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>></td><td class="name" onclick="toggle('nestedNameSpecifier0')"><a name="nestedNameSpecifier0Anchor">nestedNameSpecifier</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="nestedNameSpecifier0"><pre>Matches nested name specifiers.
+
+Given
+  namespace ns {
+    struct A { static void f(); };
+    void A::f() {}
+    void g() { A::f(); }
+  }
+  ns::A a;
+nestedNameSpecifier()
+  matches "ns::" and both "A::"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('qualType0')"><a name="qualType0Anchor">qualType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="qualType0"><pre>Matches QualTypes in the clang AST.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('CUDAKernelCallExpr0')"><a name="CUDAKernelCallExpr0Anchor">CUDAKernelCallExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CUDAKernelCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=reQdztaWV0JvsMsCSEnDeZll8wEtiRc3k7YRn9H8itw&e=">CUDAKernelCallExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="CUDAKernelCallExpr0"><pre>Matches CUDA kernel call expression.
+
+Example matches,
+  kernel<<<i,j>>>();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('arraySubscriptExpr0')"><a name="arraySubscriptExpr0Anchor">arraySubscriptExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArraySubscriptExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=D0ZFkE4Flfy9CLfNFFrAU_N4IKtHpEswjTPuLRUGzjQ&e=">ArraySubscriptExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="arraySubscriptExpr0"><pre>Matches array subscript expressions.
+
+Given
+  int i = a[1];
+arraySubscriptExpr()
+  matches "a[1]"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('asmStmt0')"><a name="asmStmt0Anchor">asmStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AsmStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=prG5uZtPixW0TVWvyhy8lQw_ERh5CiUQNKboXlzieTo&e=">AsmStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="asmStmt0"><pre>Matches asm statements.
+
+ int i = 100;
+  __asm("mov al, 2");
+asmStmt()
+  matches '__asm("mov al, 2")'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('binaryOperator0')"><a name="binaryOperator0Anchor">binaryOperator</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BinaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=UIxI7DnWERIBbGL2xiGeUTirmgf8eafokqWNzOxck28&e=">BinaryOperator</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="binaryOperator0"><pre>Matches binary operator expressions.
+
+Example matches a || b
+  !(a || b)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('bindTemporaryExpr0')"><a name="bindTemporaryExpr0Anchor">bindTemporaryExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXBindTemporaryExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=FnxmvldBu6GvCVIuDRs06GqWumxBRBPpcTjrI8djLa8&e=">CXXBindTemporaryExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="bindTemporaryExpr0"><pre>Matches nodes where temporaries are created.
+
+Example matches FunctionTakesString(GetStringByValue())
+    (matcher = bindTemporaryExpr())
+  FunctionTakesString(GetStringByValue());
+  FunctionTakesStringByPointer(GetStringPointer());
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('boolLiteral0')"><a name="boolLiteral0Anchor">boolLiteral</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXBoolLiteralExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WncX3PBx-hgZDp0S15MGTGLFIP32xCDpLL2DZYeOeB8&e=">CXXBoolLiteralExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="boolLiteral0"><pre>Matches bool literals.
+
+Example matches true
+  true
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('breakStmt0')"><a name="breakStmt0Anchor">breakStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BreakStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=NqfQhBgalbPUv9gPNAeIfL4ExvuOgjrZS7-KDIxANis&e=">BreakStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="breakStmt0"><pre>Matches break statements.
+
+Given
+  while (true) { break; }
+breakStmt()
+  matches 'break'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('cStyleCastExpr0')"><a name="cStyleCastExpr0Anchor">cStyleCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CStyleCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4VQCld1Z--hiqZR0k6X0V4DtVCf7EeQ5pT3B8ghM24c&e=">CStyleCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="cStyleCastExpr0"><pre>Matches a C-style cast expression.
+
+Example: Matches (int*) 2.2f in
+  int i = (int) 2.2f;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('callExpr0')"><a name="callExpr0Anchor">callExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="callExpr0"><pre>Matches call expressions.
+
+Example matches x.y() and y()
+  X x;
+  x.y();
+  y();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('caseStmt0')"><a name="caseStmt0Anchor">caseStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CaseStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r_3vDvIgXYUhcQPsXAbv2PXVIdjouFPCzUqOi_Zwglo&e=">CaseStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="caseStmt0"><pre>Matches case statements inside switch statements.
+
+Given
+  switch(a) { case 42: break; default: break; }
+caseStmt()
+  matches 'case 42: break;'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('castExpr0')"><a name="castExpr0Anchor">castExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=XJpdhmt82MmAYMRoLv-wsCCQZLS_g8mWCLyJ9YJxmPc&e=">CastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="castExpr0"><pre>Matches any cast nodes of Clang's AST.
+
+Example: castExpr() matches each of the following:
+  (int) 3;
+  const_cast<Expr *>(SubExpr);
+  char c = 0;
+but does not match
+  int i = (0);
+  int k = 0;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('catchStmt0')"><a name="catchStmt0Anchor">catchStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCatchStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=NCM3XD9uyo77ZdaZpWd7s_gIZyELvMkRV9ukm2LR6o0&e=">CXXCatchStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="catchStmt0"><pre>Matches catch statements.
+
+  try {} catch(int i) {}
+catchStmt()
+  matches 'catch(int i)'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('characterLiteral0')"><a name="characterLiteral0Anchor">characterLiteral</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CharacterLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PhU_tJZuTEUQ1f71pP7B6SHA75BkmPVTVWgeZHFk6e8&e=">CharacterLiteral</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="characterLiteral0"><pre>Matches character literals (also matches wchar_t).
+
+Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral),
+though.
+
+Example matches 'a', L'a'
+  char ch = 'a'; wchar_t chw = L'a';
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('compoundLiteralExpr0')"><a name="compoundLiteralExpr0Anchor">compoundLiteralExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CompoundLiteralExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4Ikj8iV6l4hZw1dITCvgL5pWwiLUe8hxXbxezwsH458&e=">CompoundLiteralExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="compoundLiteralExpr0"><pre>Matches compound (i.e. non-scalar) literals
+
+Example match: {1}, (1, 2)
+  int array[4] = {1}; vector int myvec = (vector int)(1, 2);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('compoundStmt0')"><a name="compoundStmt0Anchor">compoundStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CompoundStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=RRC2pChHSasOnIhbp-1f9rUOVanGz_XC18wqZ0uUf4Q&e=">CompoundStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="compoundStmt0"><pre>Matches compound statements.
+
+Example matches '{}' and '{{}}'in 'for (;;) {{}}'
+  for (;;) {{}}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('conditionalOperator0')"><a name="conditionalOperator0Anchor">conditionalOperator</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ConditionalOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=uan5nWo_jvKTXWgHW1OnAwECfPFl138RFEh3GyPgLkE&e=">ConditionalOperator</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="conditionalOperator0"><pre>Matches conditional operator expressions.
+
+Example matches a ? b : c
+  (a ? b : c) + 42
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('constCastExpr0')"><a name="constCastExpr0Anchor">constCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8Ejl50Zztlx9cWL2dIHWcIzg93eHuPG4rTB1YjoW5XU&e=">CXXConstCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="constCastExpr0"><pre>Matches a const_cast expression.
+
+Example: Matches const_cast<int*>(&r) in
+  int n = 42;
+  const int &r(n);
+  int* p = const_cast<int*>(&r);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('constructExpr0')"><a name="constructExpr0Anchor">constructExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="constructExpr0"><pre>Matches constructor call expressions (including implicit ones).
+
+Example matches string(ptr, n) and ptr within arguments of f
+    (matcher = constructExpr())
+  void f(const string &a, const string &b);
+  char *ptr;
+  int n;
+  f(string(ptr, n), ptr);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('continueStmt0')"><a name="continueStmt0Anchor">continueStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ContinueStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=F6ewF5Ce4BFgc-GtwAWw5y3N_QI-qw9CFheUGrPj7bM&e=">ContinueStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="continueStmt0"><pre>Matches continue statements.
+
+Given
+  while (true) { continue; }
+continueStmt()
+  matches 'continue'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('declRefExpr0')"><a name="declRefExpr0Anchor">declRefExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="declRefExpr0"><pre>Matches expressions that refer to declarations.
+
+Example matches x in if (x)
+  bool x;
+  if (x) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('declStmt0')"><a name="declStmt0Anchor">declStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=5fjQFcu7he3b3EePkO7vmR_EmaJS-VoUflS__-ptp8w&e=">DeclStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="declStmt0"><pre>Matches declaration statements.
+
+Given
+  int a;
+declStmt()
+  matches 'int a'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('defaultArgExpr0')"><a name="defaultArgExpr0Anchor">defaultArgExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXDefaultArgExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Mz8P3oO5UdhrdjD2r5XHUU9Rs4VKMzEjcBg5g33X6S4&e=">CXXDefaultArgExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="defaultArgExpr0"><pre>Matches the value of a default argument at the call site.
+
+Example matches the CXXDefaultArgExpr placeholder inserted for the
+    default value of the second parameter in the call expression f(42)
+    (matcher = defaultArgExpr())
+  void f(int x, int y = 0);
+  f(42);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('defaultStmt0')"><a name="defaultStmt0Anchor">defaultStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DefaultStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=6aSKsBklX8AFAUNB4Zr2TaOm2HrRF_aoUyzfA144Bjs&e=">DefaultStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="defaultStmt0"><pre>Matches default statements inside switch statements.
+
+Given
+  switch(a) { case 42: break; default: break; }
+defaultStmt()
+  matches 'default: break;'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('deleteExpr0')"><a name="deleteExpr0Anchor">deleteExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXDeleteExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=T3w3VbGkyWqVC2aG43drR2Ch6W5TZdtv7Sg2o82uwKU&e=">CXXDeleteExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="deleteExpr0"><pre>Matches delete expressions.
+
+Given
+  delete X;
+deleteExpr()
+  matches 'delete X'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('doStmt0')"><a name="doStmt0Anchor">doStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DoStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZdVkNxRonnkuFmZ3kcE8qMOyrcJhUpkagdp5lIm_3As&e=">DoStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="doStmt0"><pre>Matches do statements.
+
+Given
+  do {} while (true);
+doStmt()
+  matches 'do {} while(true)'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('dynamicCastExpr0')"><a name="dynamicCastExpr0Anchor">dynamicCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXDynamicCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=eopeIKozCYbBXsb65C7r7vYr4bcOyVaZX7GSf7c1YoM&e=">CXXDynamicCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="dynamicCastExpr0"><pre>Matches a dynamic_cast expression.
+
+Example:
+  dynamicCastExpr()
+matches
+  dynamic_cast<D*>(&b);
+in
+  struct B { virtual ~B() {} }; struct D : B {};
+  B b;
+  D* p = dynamic_cast<D*>(&b);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('explicitCastExpr0')"><a name="explicitCastExpr0Anchor">explicitCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ExplicitCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hXpFV7O4mjhtjCDW9FHpH46rCk9cL3QOzRBlf4ctN5E&e=">ExplicitCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="explicitCastExpr0"><pre>Matches explicit cast expressions.
+
+Matches any cast expression written in user code, whether it be a
+C-style cast, a functional-style cast, or a keyword cast.
+
+Does not match implicit conversions.
+
+Note: the name "explicitCast" is chosen to match Clang's terminology, as
+Clang uses the term "cast" to apply to implicit conversions as well as to
+actual cast expressions.
+
+hasDestinationType.
+
+Example: matches all five of the casts in
+  int((int)(reinterpret_cast<int>(static_cast<int>(const_cast<int>(42)))))
+but does not match the implicit conversion in
+  long ell = 42;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('expr0')"><a name="expr0Anchor">expr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="expr0"><pre>Matches expressions.
+
+Example matches x()
+  void f() { x(); }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('exprWithCleanups0')"><a name="exprWithCleanups0Anchor">exprWithCleanups</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ExprWithCleanups.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=1CzpoQFisNXeeB3bOOEOcycGidEuoDBLAPlir7MbCY4&e=">ExprWithCleanups</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="exprWithCleanups0"><pre>Matches expressions that introduce cleanups to be run at the end
+of the sub-expression's evaluation.
+
+Example matches std::string()
+  const std::string str = std::string();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('floatLiteral0')"><a name="floatLiteral0Anchor">floatLiteral</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FloatingLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=j0r3M9BRvcmwgkjtSY9uCIeWXs5Z8UDYLytccNjuUZ4&e=">FloatingLiteral</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="floatLiteral0"><pre>Matches float literals of all sizes encodings, e.g.
+1.0, 1.0f, 1.0L and 1e10.
+
+Does not match implicit conversions such as
+  float a = 10;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('forRangeStmt0')"><a name="forRangeStmt0Anchor">forRangeStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXForRangeStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hNzjQWIgI0ImfmDvyBOW5jmEebJESx0xXTT_ta23VvY&e=">CXXForRangeStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="forRangeStmt0"><pre>Matches range-based for statements.
+
+forRangeStmt() matches 'for (auto a : i)'
+  int i[] =  {1, 2, 3}; for (auto a : i);
+  for(int j = 0; j < 5; ++j);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('forStmt0')"><a name="forStmt0Anchor">forStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ForStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bEo2z0d9GPysj2XSX1L9Vhcrl1zUNhD6R2sEwvTM9f4&e=">ForStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="forStmt0"><pre>Matches for statements.
+
+Example matches 'for (;;) {}'
+  for (;;) {}
+  int i[] =  {1, 2, 3}; for (auto a : i);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('functionalCastExpr0')"><a name="functionalCastExpr0Anchor">functionalCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXFunctionalCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ALdCm2tI4yqsc7xI6fZkEszXzQuRc7KqK9_ouVILTRo&e=">CXXFunctionalCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="functionalCastExpr0"><pre>Matches functional cast expressions
+
+Example: Matches Foo(bar);
+  Foo f = bar;
+  Foo g = (Foo) bar;
+  Foo h = Foo(bar);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('gotoStmt0')"><a name="gotoStmt0Anchor">gotoStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1GotoStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=GCixy_x4PSoB0bOhJssjaelbmSaNR2uqDrzqtBtyCPY&e=">GotoStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="gotoStmt0"><pre>Matches goto statements.
+
+Given
+  goto FOO;
+  FOO: bar();
+gotoStmt()
+  matches 'goto FOO'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('ifStmt0')"><a name="ifStmt0Anchor">ifStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IfStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zlD8_LJYChXCv8mZwxdl3K-G-JgTCx3rgHSFo_OSbqo&e=">IfStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="ifStmt0"><pre>Matches if statements.
+
+Example matches 'if (x) {}'
+  if (x) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('implicitCastExpr0')"><a name="implicitCastExpr0Anchor">implicitCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ImplicitCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZkIMGZS-YHGmOtx2Iw4q4gFFZYoonFlsnMGmBzvqid8&e=">ImplicitCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="implicitCastExpr0"><pre>Matches the implicit cast nodes of Clang's AST.
+
+This matches many different places, including function call return value
+eliding, as well as any type conversions.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('initListExpr0')"><a name="initListExpr0Anchor">initListExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InitListExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kgMK2xUQjx3jdmuiEJKsqs-rW7CIt1bmwCr_gEix4WI&e=">InitListExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="initListExpr0"><pre>Matches init list expressions.
+
+Given
+  int a[] = { 1, 2 };
+  struct B { int x, y; };
+  B b = { 5, 6 };
+initListExpr()
+  matches "{ 1, 2 }" and "{ 5, 6 }"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('integerLiteral0')"><a name="integerLiteral0Anchor">integerLiteral</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IntegerLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aZCRDQje8jYVU_W4swnPEkPllcs1nNTtAlDzkpjnYHg&e=">IntegerLiteral</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="integerLiteral0"><pre>Matches integer literals of all sizes encodings, e.g.
+1, 1L, 0x1 and 1U.
+
+Does not match character-encoded integers such as L'a'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('labelStmt0')"><a name="labelStmt0Anchor">labelStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="labelStmt0"><pre>Matches label statements.
+
+Given
+  goto FOO;
+  FOO: bar();
+labelStmt()
+  matches 'FOO:'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('lambdaExpr0')"><a name="lambdaExpr0Anchor">lambdaExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LambdaExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=VMJ5vPdwFWF4ST9PUUp5soiavEimv-vqIWCxJ8mpMns&e=">LambdaExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="lambdaExpr0"><pre>Matches lambda expressions.
+
+Example matches [&](){return 5;}
+  [&](){return 5;}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('materializeTemporaryExpr0')"><a name="materializeTemporaryExpr0Anchor">materializeTemporaryExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MaterializeTemporaryExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Qxwma11hBQk59oppeMI3whoBYOZJliNPm7H2a_Vgoks&e=">MaterializeTemporaryExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="materializeTemporaryExpr0"><pre>Matches nodes where temporaries are materialized.
+
+Example: Given
+  struct T {void func()};
+  T f();
+  void g(T);
+materializeTemporaryExpr() matches 'f()' in these statements
+  T u(f());
+  g(f());
+but does not match
+  f();
+  f().func();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('memberCallExpr0')"><a name="memberCallExpr0Anchor">memberCallExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMemberCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cp8xlGMg1aBfQ-CpexWzo2YIHhgbo_cgnS7e7CbcrLo&e=">CXXMemberCallExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="memberCallExpr0"><pre>Matches member call expressions.
+
+Example matches x.y()
+  X x;
+  x.y();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('memberExpr0')"><a name="memberExpr0Anchor">memberExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="memberExpr0"><pre>Matches member expressions.
+
+Given
+  class Y {
+    void x() { this->x(); x(); Y y; y.x(); a; this->b; Y::b; }
+    int a; static int b;
+  };
+memberExpr()
+  matches this->x, x, y.x, a, this->b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('newExpr0')"><a name="newExpr0Anchor">newExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXNewExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=-JLo4NexaJrOyJ9VLi1HxYoSfT58y0bAEznzMk6nlQM&e=">CXXNewExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="newExpr0"><pre>Matches new expressions.
+
+Given
+  new X;
+newExpr()
+  matches 'new X'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('nullPtrLiteralExpr0')"><a name="nullPtrLiteralExpr0Anchor">nullPtrLiteralExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXNullPtrLiteralExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=1oEF50FDBkh8dwGeRSOJOJCcdCnB6nz4iTMUuqvE01I&e=">CXXNullPtrLiteralExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="nullPtrLiteralExpr0"><pre>Matches nullptr literal.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('nullStmt0')"><a name="nullStmt0Anchor">nullStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NullStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=3fvm5bnEdvF4tazdR8Au9SN9WxHPOjC_IqAawDQqKqk&e=">NullStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="nullStmt0"><pre>Matches null statements.
+
+  foo();;
+nullStmt()
+  matches the second ';'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('operatorCallExpr0')"><a name="operatorCallExpr0Anchor">operatorCallExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXOperatorCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=SdJwMqtbQcOi9h0ehLd6D2RfCa14aAJ2TFFnrTtaUq8&e=">CXXOperatorCallExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="operatorCallExpr0"><pre>Matches overloaded operator calls.
+
+Note that if an operator isn't overloaded, it won't match. Instead, use
+binaryOperator matcher.
+Currently it does not match operators such as new delete.
+FIXME: figure out why these do not match?
+
+Example matches both operator<<((o << b), c) and operator<<(o, b)
+    (matcher = operatorCallExpr())
+  ostream &operator<< (ostream &out, int i) { };
+  ostream &o; int b = 1, c = 1;
+  o << b << c;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('reinterpretCastExpr0')"><a name="reinterpretCastExpr0Anchor">reinterpretCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXReinterpretCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ut9S9r5F6eug3D7SURdcr91alLWtVpvkfxHFLMPfzt0&e=">CXXReinterpretCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="reinterpretCastExpr0"><pre>Matches a reinterpret_cast expression.
+
+Either the source expression or the destination type can be matched
+using has(), but hasDestinationType() is more specific and can be
+more readable.
+
+Example matches reinterpret_cast<char*>(&p) in
+  void* p = reinterpret_cast<char*>(&p);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('returnStmt0')"><a name="returnStmt0Anchor">returnStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReturnStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=1vP_WXeX90S0ewI94BJglsLdvfjOOaTr_KChawjgh7s&e=">ReturnStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="returnStmt0"><pre>Matches return statements.
+
+Given
+  return 1;
+returnStmt()
+  matches 'return 1'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('staticCastExpr0')"><a name="staticCastExpr0Anchor">staticCastExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXStaticCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=wvz4CqhcZM1WG5BGIMT_c0VLconEXG9UomCq8w1kVK0&e=">CXXStaticCastExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="staticCastExpr0"><pre>Matches a C++ static_cast expression.
+
+hasDestinationType
+reinterpretCast
+
+Example:
+  staticCastExpr()
+matches
+  static_cast<long>(8)
+in
+  long eight(static_cast<long>(8));
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('stmt0')"><a name="stmt0Anchor">stmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="stmt0"><pre>Matches statements.
+
+Given
+  { ++a; }
+stmt()
+  matches both the compound statement '{ ++a; }' and '++a'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('stringLiteral0')"><a name="stringLiteral0Anchor">stringLiteral</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1StringLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=W4Mk_aYcxnOM5bFnkgQ7cqfSUbcmptE_l5nPdC8cxow&e=">StringLiteral</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="stringLiteral0"><pre>Matches string literals (also matches wide string literals).
+
+Example matches "abcd", L"abcd"
+  char *s = "abcd"; wchar_t *ws = L"abcd"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('substNonTypeTemplateParmExpr0')"><a name="substNonTypeTemplateParmExpr0Anchor">substNonTypeTemplateParmExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1SubstNonTypeTemplateParmExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=SYATCrM5kjRBBV5aE7_HdRxQ6CZm2QuUvUu_6RaEAe8&e=">SubstNonTypeTemplateParmExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="substNonTypeTemplateParmExpr0"><pre>Matches substitutions of non-type template parameters.
+
+Given
+  template <int N>
+  struct A { static const int n = N; };
+  struct B : public A<42> {};
+substNonTypeTemplateParmExpr()
+  matches "N" in the right-hand side of "static const int n = N;"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('switchCase0')"><a name="switchCase0Anchor">switchCase</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1SwitchCase.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PKBOyUXWdt-V1BZC1kB_17OFMahC3thQ_SFf8_dVhqs&e=">SwitchCase</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="switchCase0"><pre>Matches case and default statements inside switch statements.
+
+Given
+  switch(a) { case 42: break; default: break; }
+switchCase()
+  matches 'case 42: break;' and 'default: break;'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('switchStmt0')"><a name="switchStmt0Anchor">switchStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1SwitchStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q5_o__QDuz6QzM16YxKr2CMC1pTPcrTekMwVwZqldUU&e=">SwitchStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="switchStmt0"><pre>Matches switch statements.
+
+Given
+  switch(a) { case 42: break; default: break; }
+switchStmt()
+  matches 'switch(a)'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('temporaryObjectExpr0')"><a name="temporaryObjectExpr0Anchor">temporaryObjectExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXTemporaryObjectExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZPKiLxWW82Nmk378pK6PDxBYtQ71LJU-jNIWBKoAgvM&e=">CXXTemporaryObjectExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="temporaryObjectExpr0"><pre>Matches functional cast expressions having N != 1 arguments
+
+Example: Matches Foo(bar, bar)
+  Foo h = Foo(bar, bar);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('thisExpr0')"><a name="thisExpr0Anchor">thisExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXThisExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=L6bzO3-LrAUU5J8Vg22v4gMgFQrgWODyfWTp8CvqRRg&e=">CXXThisExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="thisExpr0"><pre>Matches implicit and explicit this expressions.
+
+Example matches the implicit this expression in "return i".
+    (matcher = thisExpr())
+struct foo {
+  int i;
+  int f() { return i; }
+};
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('throwExpr0')"><a name="throwExpr0Anchor">throwExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXThrowExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=B_Iuy8JOwozfaKPW4YpZ2Ce5rODNs49CPt8SiSNclXg&e=">CXXThrowExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="throwExpr0"><pre>Matches throw expressions.
+
+  try { throw 5; } catch(int i) {}
+throwExpr()
+  matches 'throw 5'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('tryStmt0')"><a name="tryStmt0Anchor">tryStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXTryStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=T-ld1i4p0qkfA5iLoQouX2vfz5bOXpFAH1q5ed2B0mk&e=">CXXTryStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="tryStmt0"><pre>Matches try statements.
+
+  try {} catch(int i) {}
+tryStmt()
+  matches 'try {}'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('unaryExprOrTypeTraitExpr0')"><a name="unaryExprOrTypeTraitExpr0Anchor">unaryExprOrTypeTraitExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryExprOrTypeTraitExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ozJYicGNEZiesfoc3jwlioH71h2YF_Bwo3uMx2lHH8&e=">UnaryExprOrTypeTraitExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="unaryExprOrTypeTraitExpr0"><pre>Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
+
+Given
+  Foo x = bar;
+  int y = sizeof(x) + alignof(x);
+unaryExprOrTypeTraitExpr()
+  matches sizeof(x) and alignof(x)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('unaryOperator0')"><a name="unaryOperator0Anchor">unaryOperator</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=00k-a6RqklALT_xKLHKpoSboVGnWW9Fobx1Gshb3tz0&e=">UnaryOperator</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="unaryOperator0"><pre>Matches unary operator expressions.
+
+Example matches !a
+  !a || b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('unresolvedConstructExpr0')"><a name="unresolvedConstructExpr0Anchor">unresolvedConstructExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXUnresolvedConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aVT9wco5NVvQNYFbUpn7onE1BpAsPcWUtjevpCB6K0I&e=">CXXUnresolvedConstructExpr</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="unresolvedConstructExpr0"><pre>Matches unresolved constructor call expressions.
+
+Example matches T(t) in return statement of f
+    (matcher = unresolvedConstructExpr())
+  template <typename T>
+  void f(const T& t) { return T(t); }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('userDefinedLiteral0')"><a name="userDefinedLiteral0Anchor">userDefinedLiteral</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UserDefinedLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yCzKZaCQ1nP3qYOn4myza48bIpNZACj0cf4XL7PAsRs&e=">UserDefinedLiteral</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="userDefinedLiteral0"><pre>Matches user defined literal operator call.
+
+Example match: "foo"_suffix
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('whileStmt0')"><a name="whileStmt0Anchor">whileStmt</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1WhileStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=97wWIupATnZMzlnZBcIe4FZak8hgjzeWDtSE9Bcvijo&e=">WhileStmt</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="whileStmt0"><pre>Matches while statements.
+
+Given
+  while (true) {}
+whileStmt()
+  matches 'while (true) {}'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('templateArgument0')"><a name="templateArgument0Anchor">templateArgument</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="templateArgument0"><pre>Matches template arguments.
+
+Given
+  template <typename T> struct C {};
+  C<int> c;
+templateArgument()
+  matches 'int' in C<int>.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td><td class="name" onclick="toggle('typeLoc0')"><a name="typeLoc0Anchor">typeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('arrayType0')"><a name="arrayType0Anchor">arrayType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WuQo8D0cR_5O5krBpQfkx-oJchAk3u_9LzYIQZQdafY&e=">ArrayType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="arrayType0"><pre>Matches all kinds of arrays.
+
+Given
+  int a[] = { 2, 3 };
+  int b[4];
+  void f() { int c[a[0]]; }
+arrayType()
+  matches "int a[]", "int b[4]" and "int c[a[0]]";
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('atomicType0')"><a name="atomicType0Anchor">atomicType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AtomicType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JjxpxQkWzlszk62PQgDCo-tk04r_yvFhW4ESKNFtrPA&e=">AtomicType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="atomicType0"><pre>Matches atomic types.
+
+Given
+  _Atomic(int) i;
+atomicType()
+  matches "_Atomic(int) i"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('autoType0')"><a name="autoType0Anchor">autoType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AutoType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=FQ3UabuDquGFFtjrw9uqDckcwo4aQ8-GSkCouKOw7ac&e=">AutoType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="autoType0"><pre>Matches types nodes representing C++11 auto types.
+
+Given:
+  auto n = 4;
+  int v[] = { 2, 3 }
+  for (auto i : v) { }
+autoType()
+  matches "auto n" and "auto i"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('blockPointerType0')"><a name="blockPointerType0Anchor">blockPointerType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="blockPointerType0"><pre>Matches block pointer types, i.e. types syntactically represented as
+"void (^)(int)".
+
+The pointee is always required to be a FunctionType.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('builtinType0')"><a name="builtinType0Anchor">builtinType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BuiltinType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ue1hvuvkzkjbCOEtFjGT25Jdswcnhrlghgq3QLrGF-I&e=">BuiltinType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="builtinType0"><pre>Matches builtin Types.
+
+Given
+  struct A {};
+  A a;
+  int b;
+  float c;
+  bool d;
+builtinType()
+  matches "int b", "float c" and "bool d"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('complexType0')"><a name="complexType0Anchor">complexType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZfB-byrhNu_WlpJ0NmNvXlJcKfb1-WFvVqafx-1Umhg&e=">ComplexType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="complexType0"><pre>Matches C99 complex types.
+
+Given
+  _Complex float f;
+complexType()
+  matches "_Complex float f"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('constantArrayType0')"><a name="constantArrayType0Anchor">constantArrayType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ConstantArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zmIk9A-4sbJBvqQtB2zM7j_9XnmqKoX2MHbmL5Iyd2U&e=">ConstantArrayType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="constantArrayType0"><pre>Matches C arrays with a specified constant size.
+
+Given
+  void() {
+    int a[2];
+    int b[] = { 2, 3 };
+    int c[b[0]];
+  }
+constantArrayType()
+  matches "int a[2]"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('dependentSizedArrayType0')"><a name="dependentSizedArrayType0Anchor">dependentSizedArrayType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DependentSizedArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=b2BXK6b-YPyCR4JGYQcRcV8puBU-2hmbQiTWx6u2wVQ&e=">DependentSizedArrayType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="dependentSizedArrayType0"><pre>Matches C++ arrays whose size is a value-dependent expression.
+
+Given
+  template<typename T, int Size>
+  class array {
+    T data[Size];
+  };
+dependentSizedArrayType
+  matches "T data[Size]"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('elaboratedType0')"><a name="elaboratedType0Anchor">elaboratedType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ElaboratedType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JHL6YwzIA4TWdFS-K_o-0z3kNucR4NG4tbN-q9MhExs&e=">ElaboratedType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="elaboratedType0"><pre>Matches types specified with an elaborated type keyword or with a
+qualified name.
+
+Given
+  namespace N {
+    namespace M {
+      class D {};
+    }
+  }
+  class C {};
+
+  class C c;
+  N::M::D d;
+
+elaboratedType() matches the type of the variable declarations of both
+c and d.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('functionType0')"><a name="functionType0Anchor">functionType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Tu5DijrTbFzw_Yc5c1RRngE5GBL5PfWStZLzfmBSdfc&e=">FunctionType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="functionType0"><pre>Matches FunctionType nodes.
+
+Given
+  int (*f)(int);
+  void g();
+functionType()
+  matches "int (*f)(int)" and the type of "g".
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('incompleteArrayType0')"><a name="incompleteArrayType0Anchor">incompleteArrayType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IncompleteArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=AtzeRDuRgUtklB_Ss1P6pH_Fgi9na7FQGkOo_O10NZk&e=">IncompleteArrayType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="incompleteArrayType0"><pre>Matches C arrays with unspecified size.
+
+Given
+  int a[] = { 2, 3 };
+  int b[42];
+  void f(int c[]) { int d[a[0]]; };
+incompleteArrayType()
+  matches "int a[]" and "int c[]"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('lValueReferenceType0')"><a name="lValueReferenceType0Anchor">lValueReferenceType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LValueReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Ss2ZV_v0uu74LaXSY-BXbqEfLFJSkNWxK9h1LAnoiNw&e=">LValueReferenceType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="lValueReferenceType0"><pre>Matches lvalue reference types.
+
+Given:
+  int *a;
+  int &b = *a;
+  int &&c = 1;
+  auto &d = b;
+  auto &&e = c;
+  auto &&f = 2;
+  int g = 5;
+
+lValueReferenceType() matches the types of b, d, and e. e is
+matched since the type is deduced as int& by reference collapsing rules.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('memberPointerType0')"><a name="memberPointerType0Anchor">memberPointerType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="memberPointerType0"><pre>Matches member pointer types.
+Given
+  struct A { int i; }
+  A::* ptr = A::i;
+memberPointerType()
+  matches "A::* ptr"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('parenType0')"><a name="parenType0Anchor">parenType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ParenType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=x-8drx9z1G0HpYgi53qaEZFXY1jzTNwpiT7-GKpEwjc&e=">ParenType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="parenType0"><pre>Matches ParenType nodes.
+
+Given
+  int (*ptr_to_array)[4];
+  int *array_of_ptrs[4];
+
+varDecl(hasType(pointsTo(parenType()))) matches ptr_to_array but not
+array_of_ptrs.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('pointerType0')"><a name="pointerType0Anchor">pointerType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="pointerType0"><pre>Matches pointer types.
+
+Given
+  int *a;
+  int &b = *a;
+  int c = 5;
+pointerType()
+  matches "int *a"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('rValueReferenceType0')"><a name="rValueReferenceType0Anchor">rValueReferenceType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RValueReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=6ek_Pp60uCUnGK8T3WjBH-Goa7V0cMZsUuCvEYHJEDI&e=">RValueReferenceType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="rValueReferenceType0"><pre>Matches rvalue reference types.
+
+Given:
+  int *a;
+  int &b = *a;
+  int &&c = 1;
+  auto &d = b;
+  auto &&e = c;
+  auto &&f = 2;
+  int g = 5;
+
+rValueReferenceType() matches the types of c and f. e is not
+matched as it is deduced to int& by reference collapsing rules.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('recordType0')"><a name="recordType0Anchor">recordType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="recordType0"><pre>Matches record types (e.g. structs, classes).
+
+Given
+  class C {};
+  struct S {};
+
+  C c;
+  S s;
+
+recordType() matches the type of the variable declarations of both c
+and s.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('referenceType0')"><a name="referenceType0Anchor">referenceType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="referenceType0"><pre>Matches both lvalue and rvalue reference types.
+
+Given
+  int *a;
+  int &b = *a;
+  int &&c = 1;
+  auto &d = b;
+  auto &&e = c;
+  auto &&f = 2;
+  int g = 5;
+
+referenceType() matches the types of b, c, d, e, and f.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('templateSpecializationType0')"><a name="templateSpecializationType0Anchor">templateSpecializationType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="templateSpecializationType0"><pre>Matches template specialization types.
+
+Given
+  template <typename T>
+  class C { };
+
+  template class C<int>;  A
+  C<char> var;            B
+
+templateSpecializationType() matches the type of the explicit
+instantiation in A and the type of the variable declaration in B.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('type0')"><a name="type0Anchor">type</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('typedefType0')"><a name="typedefType0Anchor">typedefType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="typedefType0"><pre>Matches typedef types.
+
+Given
+  typedef int X;
+typedefType()
+  matches "typedef int X"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('unaryTransformType0')"><a name="unaryTransformType0Anchor">unaryTransformType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryTransformType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=3FhP59JW10-ozxf-7NeZOo88VvVTjVnfG7sFNGTdT1Q&e=">UnaryTransformType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="unaryTransformType0"><pre>Matches types nodes representing unary type transformations.
+
+Given:
+  typedef __underlying_type(T) type;
+unaryTransformType()
+  matches "__underlying_type(T)"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('variableArrayType0')"><a name="variableArrayType0Anchor">variableArrayType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VariableArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=5NhaumSdsmuqljua9HOaju8-xIWe6mdgLI71Pd_YJik&e=">VariableArrayType</a>>...</td></tr>
+<tr><td colspan="4" class="doc" id="variableArrayType0"><pre>Matches C arrays with a specified size that is not an
+integer-constant-expression.
+
+Given
+  void f() {
+    int a[] = { 2, 3 }
+    int b[42];
+    int c[a[0]];
+  }
+variableArrayType()
+  matches "int c[a[0]]"
+</pre></td></tr>
+
+<!--END_DECL_MATCHERS -->
+</table>
+
+<!-- ======================================================================= -->
+<h2 id="narrowing-matchers">Narrowing Matchers</h2>
+<!-- ======================================================================= -->
+
+<p>Narrowing matchers match certain attributes on the current node, thus
+narrowing down the set of nodes of the current type to match on.</p>
+
+<p>There are special logical narrowing matchers (allOf, anyOf, anything and unless)
+which allow users to create more powerful match expressions.</p>
+
+<table>
+<tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
+<!-- START_NARROWING_MATCHERS -->
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('allOf0')"><a name="allOf0Anchor">allOf</a></td><td>Matcher<*>, ..., Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="allOf0"><pre>Matches if all given matchers match.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('anyOf0')"><a name="anyOf0Anchor">anyOf</a></td><td>Matcher<*>, ..., Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="anyOf0"><pre>Matches if any of the given matchers matches.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('anything0')"><a name="anything0Anchor">anything</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="anything0"><pre>Matches any node.
+
+Useful when another matcher requires a child matcher, but there's no
+additional constraint. This will often be used with an explicit conversion
+to an internal::Matcher<> type such as TypeMatcher.
+
+Example: DeclarationMatcher(anything()) matches all declarations, e.g.,
+"int* p" and "void f()" in
+  int* p;
+  void f();
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="unless0"><pre>Matches if the provided matcher does not match.
+
+Example matches Y (matcher = recordDecl(unless(hasName("X"))))
+  class X {};
+  class Y {};
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BinaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=UIxI7DnWERIBbGL2xiGeUTirmgf8eafokqWNzOxck28&e=">BinaryOperator</a>></td><td class="name" onclick="toggle('hasOperatorName0')"><a name="hasOperatorName0Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
+<tr><td colspan="4" class="doc" id="hasOperatorName0"><pre>Matches the operator Name of operator expressions (binary or
+unary).
+
+Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
+  !(a || b)
+</pre></td></tr>
+
+
+<tr><td>Matcher<CXXBoolLiteral></td><td class="name" onclick="toggle('equals2')"><a name="equals2Anchor">equals</a></td><td>ValueT  Value</td></tr>
+<tr><td colspan="4" class="doc" id="equals2"><pre>Matches literals that are equal to the given value.
+
+Example matches true (matcher = boolLiteral(equals(true)))
+  true
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CharacterLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PhU_tJZuTEUQ1f71pP7B6SHA75BkmPVTVWgeZHFk6e8&e=">CharacterLiteral</a>>, Matcher<CXXBoolLiteral>,
+           Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FloatingLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=j0r3M9BRvcmwgkjtSY9uCIeWXs5Z8UDYLytccNjuUZ4&e=">FloatingLiteral</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IntegerLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aZCRDQje8jYVU_W4swnPEkPllcs1nNTtAlDzkpjnYHg&e=">IntegerLiteral</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>></td><td class="name" onclick="toggle('argumentCountIs1')"><a name="argumentCountIs1Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="argumentCountIs1"><pre>Checks that a call expression or a constructor call expression has
+a specific number of arguments (including absent default arguments).
+
+Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
+  void f(int x, int y);
+  f(0, 0);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>></td><td class="name" onclick="toggle('isListInitialization0')"><a name="isListInitialization0Anchor">isListInitialization</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isListInitialization0"><pre>Matches a constructor call expression which uses list initialization.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('isWritten0')"><a name="isWritten0Anchor">isWritten</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isWritten0"><pre>Matches a constructor initializer if it is explicitly written in
+code (as opposed to implicitly added by the compiler).
+
+Given
+  struct Foo {
+    Foo() { }
+    Foo(int) : foo_("A") { }
+    string foo_;
+  };
+constructorDecl(hasAnyConstructorInitializer(isWritten()))
+  will match Foo(int), but not Foo()
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>></td><td class="name" onclick="toggle('isConst0')"><a name="isConst0Anchor">isConst</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isConst0"><pre>Matches if the given method declaration is const.
+
+Given
+struct A {
+  void foo() const;
+  void bar();
+};
+
+methodDecl(isConst()) matches A::foo() but not A::bar()
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>></td><td class="name" onclick="toggle('isOverride0')"><a name="isOverride0Anchor">isOverride</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isOverride0"><pre>Matches if the given method declaration overrides another method.
+
+Given
+  class A {
+   public:
+    virtual void x();
+  };
+  class B : public A {
+   public:
+    virtual void x();
+  };
+  matches B::x
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>></td><td class="name" onclick="toggle('isPure0')"><a name="isPure0Anchor">isPure</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isPure0"><pre>Matches if the given method declaration is pure.
+
+Given
+  class A {
+   public:
+    virtual void x() = 0;
+  };
+  matches A::x
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>></td><td class="name" onclick="toggle('isVirtual0')"><a name="isVirtual0Anchor">isVirtual</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isVirtual0"><pre>Matches if the given method declaration is virtual.
+
+Given
+  class A {
+   public:
+    virtual void x();
+  };
+  matches A::x
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXOperatorCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=SdJwMqtbQcOi9h0ehLd6D2RfCa14aAJ2TFFnrTtaUq8&e=">CXXOperatorCallExpr</a>></td><td class="name" onclick="toggle('hasOverloadedOperatorName1')"><a name="hasOverloadedOperatorName1Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
+<tr><td colspan="4" class="doc" id="hasOverloadedOperatorName1"><pre>Matches overloaded operator names.
+
+Matches overloaded operator names specified in strings without the
+"operator" prefix: e.g. "<<".
+
+Given:
+  class A { int operator*(); };
+  const A &operator<<(const A &a, const A &b);
+  A a;
+  a << a;   <-- This matches
+
+operatorCallExpr(hasOverloadedOperatorName("<<"))) matches the specified
+line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
+the declaration of A.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXOperatorCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=SdJwMqtbQcOi9h0ehLd6D2RfCa14aAJ2TFFnrTtaUq8&e=">CXXOperatorCallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('isDerivedFrom1')"><a name="isDerivedFrom1Anchor">isDerivedFrom</a></td><td>StringRef BaseName</td></tr>
+<tr><td colspan="4" class="doc" id="isDerivedFrom1"><pre>Overloaded method as shortcut for isDerivedFrom(hasName(...)).
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('isExplicitTemplateSpecialization2')"><a name="isExplicitTemplateSpecialization2Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization2"><pre>Matches explicit template specializations of function, class, or
+static member variable template instantiations.
+
+Given
+  template<typename T> void A(T t) { }
+  template<> void A(int N) { }
+functionDecl(isExplicitTemplateSpecialization())
+  matches the specialization A<int>().
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('isSameOrDerivedFrom1')"><a name="isSameOrDerivedFrom1Anchor">isSameOrDerivedFrom</a></td><td>StringRef BaseName</td></tr>
+<tr><td colspan="4" class="doc" id="isSameOrDerivedFrom1"><pre>Overloaded method as shortcut for
+isSameOrDerivedFrom(hasName(...)).
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('isTemplateInstantiation2')"><a name="isTemplateInstantiation2Anchor">isTemplateInstantiation</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isTemplateInstantiation2"><pre>Matches template instantiations of function, class, or static
+member variable template instantiations.
+
+Given
+  template <typename T> class X {}; class A {}; X<A> x;
+or
+  template <typename T> class X {}; class A {}; template class X<A>;
+recordDecl(hasName("::X"), isTemplateInstantiation())
+  matches the template instantiation of X<A>.
+
+But given
+  template <typename T>  class X {}; class A {};
+  template <> class X<A> {}; X<A> x;
+recordDecl(hasName("::X"), isTemplateInstantiation())
+  does not match, as X<A> is an explicit template specialization.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>></td><td class="name" onclick="toggle('argumentCountIs0')"><a name="argumentCountIs0Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="argumentCountIs0"><pre>Checks that a call expression or a constructor call expression has
+a specific number of arguments (including absent default arguments).
+
+Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
+  void f(int x, int y);
+  f(0, 0);
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CharacterLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PhU_tJZuTEUQ1f71pP7B6SHA75BkmPVTVWgeZHFk6e8&e=">CharacterLiteral</a>></td><td class="name" onclick="toggle('equals3')"><a name="equals3Anchor">equals</a></td><td>ValueT  Value</td></tr>
+<tr><td colspan="4" class="doc" id="equals3"><pre>Matches literals that are equal to the given value.
+
+Example matches true (matcher = boolLiteral(equals(true)))
+  true
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CharacterLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PhU_tJZuTEUQ1f71pP7B6SHA75BkmPVTVWgeZHFk6e8&e=">CharacterLiteral</a>>, Matcher<CXXBoolLiteral>,
+           Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FloatingLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=j0r3M9BRvcmwgkjtSY9uCIeWXs5Z8UDYLytccNjuUZ4&e=">FloatingLiteral</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IntegerLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aZCRDQje8jYVU_W4swnPEkPllcs1nNTtAlDzkpjnYHg&e=">IntegerLiteral</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ClassTemplateSpecializationDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=iich7Kuv3wmbxswgfACtBwW8s4624IIuhFHoZV_uYFU&e=">ClassTemplateSpecializationDecl</a>></td><td class="name" onclick="toggle('templateArgumentCountIs0')"><a name="templateArgumentCountIs0Anchor">templateArgumentCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="templateArgumentCountIs0"><pre>Matches if the number of template arguments equals N.
+
+Given
+  template<typename T> struct C {};
+  C<int> c;
+classTemplateSpecializationDecl(templateArgumentCountIs(1))
+  matches C<int>.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CompoundStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=RRC2pChHSasOnIhbp-1f9rUOVanGz_XC18wqZ0uUf4Q&e=">CompoundStmt</a>></td><td class="name" onclick="toggle('statementCountIs0')"><a name="statementCountIs0Anchor">statementCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="statementCountIs0"><pre>Checks that a compound statement contains a specific number of
+child statements.
+
+Example: Given
+  { for (;;) {} }
+compoundStmt(statementCountIs(0)))
+  matches '{}'
+  but does not match the outer compound statement.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ConstantArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zmIk9A-4sbJBvqQtB2zM7j_9XnmqKoX2MHbmL5Iyd2U&e=">ConstantArrayType</a>></td><td class="name" onclick="toggle('hasSize0')"><a name="hasSize0Anchor">hasSize</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="hasSize0"><pre>Matches ConstantArrayType nodes that have the specified size.
+
+Given
+  int a[42];
+  int b[2 * 21];
+  int c[41], d[43];
+constantArrayType(hasSize(42))
+  matches "int a[42]" and "int b[2 * 21]"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=5fjQFcu7he3b3EePkO7vmR_EmaJS-VoUflS__-ptp8w&e=">DeclStmt</a>></td><td class="name" onclick="toggle('declCountIs0')"><a name="declCountIs0Anchor">declCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="declCountIs0"><pre>Matches declaration statements that contain a specific number of
+declarations.
+
+Example: Given
+  int a, b;
+  int c;
+  int d = 2, e;
+declCountIs(2)
+  matches 'int a, b;' and 'int d = 2, e;', but not 'int c;'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('equalsBoundNode1')"><a name="equalsBoundNode1Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
+<tr><td colspan="4" class="doc" id="equalsBoundNode1"><pre>Matches if a node equals a previously bound node.
+
+Matches a node if it equals the node previously bound to ID.
+
+Given
+  class X { int a; int b; };
+recordDecl(
+    has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
+    has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
+  matches the class X, as a and b have the same type.
+
+Note that when multiple matches are involved via forEach* matchers,
+equalsBoundNodes acts as a filter.
+For example:
+compoundStmt(
+    forEachDescendant(varDecl().bind("d")),
+    forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
+will trigger a match for each combination of variable declaration
+and reference to that variable declaration within a compound statement.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('hasAttr0')"><a name="hasAttr0Anchor">hasAttr</a></td><td>attr::Kind AttrKind</td></tr>
+<tr><td colspan="4" class="doc" id="hasAttr0"><pre>Matches declaration that has a given attribute.
+
+Given
+  __attribute__((device)) void f() { ... }
+decl(hasAttr(clang::attr::CUDADevice)) matches the function declaration of
+f.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isExpansionInFileMatching0')"><a name="isExpansionInFileMatching0Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInFileMatching0"><pre>Matches AST nodes that were expanded within files whose name is
+partially matching a given regex.
+
+Example matches Y but not X
+    (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
+  #include "ASTMatcher.h"
+  class X {};
+ASTMatcher.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isExpansionInMainFile0')"><a name="isExpansionInMainFile0Anchor">isExpansionInMainFile</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInMainFile0"><pre>Matches AST nodes that were expanded within the main-file.
+
+Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())
+  #include <Y.h>
+  class X {};
+Y.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isExpansionInSystemHeader0')"><a name="isExpansionInSystemHeader0Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInSystemHeader0"><pre>Matches AST nodes that were expanded within system-header-files.
+
+Example matches Y but not X
+    (matcher = recordDecl(isExpansionInSystemHeader())
+  #include <SystemHeader.h>
+  class X {};
+SystemHeader.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isImplicit0')"><a name="isImplicit0Anchor">isImplicit</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a declaration that has been implicitly added
+by the compiler (eg. implicit defaultcopy constructors).
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isInstantiated0')"><a name="isInstantiated0Anchor">isInstantiated</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isInstantiated0"><pre>Matches declarations that are template instantiations or are inside
+template instantiations.
+
+Given
+  template<typename T> void A(T t) { T i; }
+  A(0);
+  A(0U);
+functionDecl(isInstantiated())
+  matches 'A(int) {...};' and 'A(unsigned) {...}'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isPrivate0')"><a name="isPrivate0Anchor">isPrivate</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isPrivate0"><pre>Matches private C++ declarations.
+
+Given
+  class C {
+  public:    int a;
+  protected: int b;
+  private:   int c;
+  };
+fieldDecl(isPrivate())
+  matches 'int c;' 
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isProtected0')"><a name="isProtected0Anchor">isProtected</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isProtected0"><pre>Matches protected C++ declarations.
+
+Given
+  class C {
+  public:    int a;
+  protected: int b;
+  private:   int c;
+  };
+fieldDecl(isProtected())
+  matches 'int b;' 
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('isPublic0')"><a name="isPublic0Anchor">isPublic</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isPublic0"><pre>Matches public C++ declarations.
+
+Given
+  class C {
+  public:    int a;
+  protected: int b;
+  private:   int c;
+  };
+fieldDecl(isPublic())
+  matches 'int a;' 
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FloatingLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=j0r3M9BRvcmwgkjtSY9uCIeWXs5Z8UDYLytccNjuUZ4&e=">FloatingLiteral</a>></td><td class="name" onclick="toggle('equals1')"><a name="equals1Anchor">equals</a></td><td>ValueT  Value</td></tr>
+<tr><td colspan="4" class="doc" id="equals1"><pre>Matches literals that are equal to the given value.
+
+Example matches true (matcher = boolLiteral(equals(true)))
+  true
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CharacterLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PhU_tJZuTEUQ1f71pP7B6SHA75BkmPVTVWgeZHFk6e8&e=">CharacterLiteral</a>>, Matcher<CXXBoolLiteral>,
+           Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FloatingLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=j0r3M9BRvcmwgkjtSY9uCIeWXs5Z8UDYLytccNjuUZ4&e=">FloatingLiteral</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IntegerLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aZCRDQje8jYVU_W4swnPEkPllcs1nNTtAlDzkpjnYHg&e=">IntegerLiteral</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('hasOverloadedOperatorName0')"><a name="hasOverloadedOperatorName0Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
+<tr><td colspan="4" class="doc" id="hasOverloadedOperatorName0"><pre>Matches overloaded operator names.
+
+Matches overloaded operator names specified in strings without the
+"operator" prefix: e.g. "<<".
+
+Given:
+  class A { int operator*(); };
+  const A &operator<<(const A &a, const A &b);
+  A a;
+  a << a;   <-- This matches
+
+operatorCallExpr(hasOverloadedOperatorName("<<"))) matches the specified
+line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
+the declaration of A.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXOperatorCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=SdJwMqtbQcOi9h0ehLd6D2RfCa14aAJ2TFFnrTtaUq8&e=">CXXOperatorCallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('isDefinition2')"><a name="isDefinition2Anchor">isDefinition</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isDefinition2"><pre>Matches if a declaration has a body attached.
+
+Example matches A, va, fa
+  class A {};
+  class B;  Doesn't match, as it has no body.
+  int va;
+  extern int vb;  Doesn't match, as it doesn't define the variable.
+  void fa() {}
+  void fb();  Doesn't match, as it has no body.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=3t0axXNZnnKxUVZrVnEa5IBzG0Vxsz-hCMFhJ8Hv-Z4&e=">TagDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('isDeleted0')"><a name="isDeleted0Anchor">isDeleted</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isDeleted0"><pre>Matches deleted function declarations.
+
+Given:
+  void Func();
+  void DeletedFunc() = delete;
+functionDecl(isDeleted())
+  matches the declaration of DeletedFunc, but not Func.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('isExplicitTemplateSpecialization0')"><a name="isExplicitTemplateSpecialization0Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization0"><pre>Matches explicit template specializations of function, class, or
+static member variable template instantiations.
+
+Given
+  template<typename T> void A(T t) { }
+  template<> void A(int N) { }
+functionDecl(isExplicitTemplateSpecialization())
+  matches the specialization A<int>().
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('isExternC0')"><a name="isExternC0Anchor">isExternC</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExternC0"><pre>Matches extern "C" function declarations.
+
+Given:
+  extern "C" void f() {}
+  extern "C" { void g() {} }
+  void h() {}
+functionDecl(isExternC())
+  matches the declaration of f and g, but not the declaration h
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('isTemplateInstantiation0')"><a name="isTemplateInstantiation0Anchor">isTemplateInstantiation</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isTemplateInstantiation0"><pre>Matches template instantiations of function, class, or static
+member variable template instantiations.
+
+Given
+  template <typename T> class X {}; class A {}; X<A> x;
+or
+  template <typename T> class X {}; class A {}; template class X<A>;
+recordDecl(hasName("::X"), isTemplateInstantiation())
+  matches the template instantiation of X<A>.
+
+But given
+  template <typename T>  class X {}; class A {};
+  template <> class X<A> {}; X<A> x;
+recordDecl(hasName("::X"), isTemplateInstantiation())
+  does not match, as X<A> is an explicit template specialization.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('parameterCountIs0')"><a name="parameterCountIs0Anchor">parameterCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="parameterCountIs0"><pre>Matches FunctionDecls that have a specific parameter count.
+
+Given
+  void f(int i) {}
+  void g(int i, int j) {}
+functionDecl(parameterCountIs(2))
+  matches g(int i, int j) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IntegerLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aZCRDQje8jYVU_W4swnPEkPllcs1nNTtAlDzkpjnYHg&e=">IntegerLiteral</a>></td><td class="name" onclick="toggle('equals0')"><a name="equals0Anchor">equals</a></td><td>ValueT  Value</td></tr>
+<tr><td colspan="4" class="doc" id="equals0"><pre>Matches literals that are equal to the given value.
+
+Example matches true (matcher = boolLiteral(equals(true)))
+  true
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CharacterLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PhU_tJZuTEUQ1f71pP7B6SHA75BkmPVTVWgeZHFk6e8&e=">CharacterLiteral</a>>, Matcher<CXXBoolLiteral>,
+           Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FloatingLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=j0r3M9BRvcmwgkjtSY9uCIeWXs5Z8UDYLytccNjuUZ4&e=">FloatingLiteral</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IntegerLiteral.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=aZCRDQje8jYVU_W4swnPEkPllcs1nNTtAlDzkpjnYHg&e=">IntegerLiteral</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>></td><td class="name" onclick="toggle('isArrow0')"><a name="isArrow0Anchor">isArrow</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isArrow0"><pre>Matches member expressions that are called with '->' as opposed
+to '.'.
+
+Member calls on the implicit this pointer match as called with '->'.
+
+Given
+  class Y {
+    void x() { this->x(); x(); Y y; y.x(); a; this->b; Y::b; }
+    int a;
+    static int b;
+  };
+memberExpr(isArrow())
+  matches this->x, x, y.x, a, this->b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamedDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sL6uAKZbbnobqmoPp-FyciHC0wE51_wpmfOcZ6g7OkY&e=">NamedDecl</a>></td><td class="name" onclick="toggle('hasName0')"><a name="hasName0Anchor">hasName</a></td><td>std::string  Name</td></tr>
+<tr><td colspan="4" class="doc" id="hasName0"><pre>Matches NamedDecl nodes that have the specified name.
+
+Supports specifying enclosing namespaces or classes by prefixing the name
+with '<enclosing>::'.
+Does not match typedefs of an underlying type with the given name.
+
+Example matches X (Name == "X")
+  class X;
+
+Example matches X (Name is one of "::a::b::X", "a::b::X", "b::X", "X")
+  namespace a { namespace b { class X; } }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamedDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sL6uAKZbbnobqmoPp-FyciHC0wE51_wpmfOcZ6g7OkY&e=">NamedDecl</a>></td><td class="name" onclick="toggle('matchesName0')"><a name="matchesName0Anchor">matchesName</a></td><td>std::string RegExp</td></tr>
+<tr><td colspan="4" class="doc" id="matchesName0"><pre>Matches NamedDecl nodes whose fully qualified names contain
+a substring matched by the given RegExp.
+
+Supports specifying enclosing namespaces or classes by
+prefixing the name with '<enclosing>::'.  Does not match typedefs
+of an underlying type with the given name.
+
+Example matches X (regexp == "::X")
+  class X;
+
+Example matches X (regexp is one of "::X", "^foo::.*X", among others)
+  namespace foo { namespace bar { class X; } }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('asString0')"><a name="asString0Anchor">asString</a></td><td>std::string Name</td></tr>
+<tr><td colspan="4" class="doc" id="asString0"><pre>Matches if the matched type is represented by the given string.
+
+Given
+  class Y { public: void x(); };
+  void z() { Y* y; y->x(); }
+callExpr(on(hasType(asString("class Y *"))))
+  matches y->x()
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('equalsBoundNode3')"><a name="equalsBoundNode3Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
+<tr><td colspan="4" class="doc" id="equalsBoundNode3"><pre>Matches if a node equals a previously bound node.
+
+Matches a node if it equals the node previously bound to ID.
+
+Given
+  class X { int a; int b; };
+recordDecl(
+    has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
+    has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
+  matches the class X, as a and b have the same type.
+
+Note that when multiple matches are involved via forEach* matchers,
+equalsBoundNodes acts as a filter.
+For example:
+compoundStmt(
+    forEachDescendant(varDecl().bind("d")),
+    forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
+will trigger a match for each combination of variable declaration
+and reference to that variable declaration within a compound statement.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('hasLocalQualifiers0')"><a name="hasLocalQualifiers0Anchor">hasLocalQualifiers</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="hasLocalQualifiers0"><pre>Matches QualType nodes that have local CV-qualifiers attached to
+the node, not hidden within a typedef.
+
+Given
+  typedef const int const_int;
+  const_int i;
+  int *const j;
+  int *volatile k;
+  int m;
+varDecl(hasType(hasLocalQualifiers())) matches only j and k.
+i is const-qualified but the qualifier is not local.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('isConstQualified0')"><a name="isConstQualified0Anchor">isConstQualified</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isConstQualified0"><pre>Matches QualType nodes that are const-qualified, i.e., that
+include "top-level" const.
+
+Given
+  void a(int);
+  void b(int const);
+  void c(const int);
+  void d(const int*);
+  void e(int const) {};
+functionDecl(hasAnyParameter(hasType(isConstQualified())))
+  matches "void b(int const)", "void c(const int)" and
+  "void e(int const) {}". It does not match d as there
+  is no top-level const on the parameter type "const int *".
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('isInteger0')"><a name="isInteger0Anchor">isInteger</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isInteger0"><pre>Matches QualType nodes that are of integer type.
+
+Given
+  void a(int);
+  void b(long);
+  void c(double);
+functionDecl(hasAnyParameter(hasType(isInteger())))
+matches "a(int)", "b(long)", but not "c(double)".
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('equalsBoundNode0')"><a name="equalsBoundNode0Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
+<tr><td colspan="4" class="doc" id="equalsBoundNode0"><pre>Matches if a node equals a previously bound node.
+
+Matches a node if it equals the node previously bound to ID.
+
+Given
+  class X { int a; int b; };
+recordDecl(
+    has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
+    has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
+  matches the class X, as a and b have the same type.
+
+Note that when multiple matches are involved via forEach* matchers,
+equalsBoundNodes acts as a filter.
+For example:
+compoundStmt(
+    forEachDescendant(varDecl().bind("d")),
+    forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
+will trigger a match for each combination of variable declaration
+and reference to that variable declaration within a compound statement.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('isExpansionInFileMatching1')"><a name="isExpansionInFileMatching1Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInFileMatching1"><pre>Matches AST nodes that were expanded within files whose name is
+partially matching a given regex.
+
+Example matches Y but not X
+    (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
+  #include "ASTMatcher.h"
+  class X {};
+ASTMatcher.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('isExpansionInMainFile1')"><a name="isExpansionInMainFile1Anchor">isExpansionInMainFile</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInMainFile1"><pre>Matches AST nodes that were expanded within the main-file.
+
+Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())
+  #include <Y.h>
+  class X {};
+Y.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('isExpansionInSystemHeader1')"><a name="isExpansionInSystemHeader1Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInSystemHeader1"><pre>Matches AST nodes that were expanded within system-header-files.
+
+Example matches Y but not X
+    (matcher = recordDecl(isExpansionInSystemHeader())
+  #include <SystemHeader.h>
+  class X {};
+SystemHeader.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('isInTemplateInstantiation0')"><a name="isInTemplateInstantiation0Anchor">isInTemplateInstantiation</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isInTemplateInstantiation0"><pre>Matches statements inside of a template instantiation.
+
+Given
+  int j;
+  template<typename T> void A(T t) { T i; j += 42;}
+  A(0);
+  A(0U);
+declStmt(isInTemplateInstantiation())
+  matches 'int i;' and 'unsigned i'.
+unless(stmt(isInTemplateInstantiation()))
+  will NOT match j += 42; as it's shared between the template definition and
+  instantiation.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=3t0axXNZnnKxUVZrVnEa5IBzG0Vxsz-hCMFhJ8Hv-Z4&e=">TagDecl</a>></td><td class="name" onclick="toggle('isDefinition0')"><a name="isDefinition0Anchor">isDefinition</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isDefinition0"><pre>Matches if a declaration has a body attached.
+
+Example matches A, va, fa
+  class A {};
+  class B;  Doesn't match, as it has no body.
+  int va;
+  extern int vb;  Doesn't match, as it doesn't define the variable.
+  void fa() {}
+  void fb();  Doesn't match, as it has no body.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=3t0axXNZnnKxUVZrVnEa5IBzG0Vxsz-hCMFhJ8Hv-Z4&e=">TagDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('equalsIntegralValue0')"><a name="equalsIntegralValue0Anchor">equalsIntegralValue</a></td><td>std::string Value</td></tr>
+<tr><td colspan="4" class="doc" id="equalsIntegralValue0"><pre>Matches a TemplateArgument of integral type with a given value.
+
+Note that 'Value' is a string as the template argument's value is
+an arbitrary precision integer. 'Value' must be euqal to the canonical
+representation of that integral value in base 10.
+
+Given
+  template<int T> struct A {};
+  C<42> c;
+classTemplateSpecializationDecl(
+  hasAnyTemplateArgument(equalsIntegralValue("42")))
+  matches the implicit instantiation of C in C<42>.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('isIntegral0')"><a name="isIntegral0Anchor">isIntegral</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isIntegral0"><pre>Matches a TemplateArgument that is an integral value.
+
+Given
+  template<int T> struct A {};
+  C<42> c;
+classTemplateSpecializationDecl(
+  hasAnyTemplateArgument(isIntegral()))
+  matches the implicit instantiation of C in C<42>
+  with isIntegral() matching 42.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('templateArgumentCountIs1')"><a name="templateArgumentCountIs1Anchor">templateArgumentCountIs</a></td><td>unsigned N</td></tr>
+<tr><td colspan="4" class="doc" id="templateArgumentCountIs1"><pre>Matches if the number of template arguments equals N.
+
+Given
+  template<typename T> struct C {};
+  C<int> c;
+classTemplateSpecializationDecl(templateArgumentCountIs(1))
+  matches C<int>.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td><td class="name" onclick="toggle('isExpansionInFileMatching2')"><a name="isExpansionInFileMatching2Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInFileMatching2"><pre>Matches AST nodes that were expanded within files whose name is
+partially matching a given regex.
+
+Example matches Y but not X
+    (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
+  #include "ASTMatcher.h"
+  class X {};
+ASTMatcher.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td><td class="name" onclick="toggle('isExpansionInMainFile2')"><a name="isExpansionInMainFile2Anchor">isExpansionInMainFile</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInMainFile2"><pre>Matches AST nodes that were expanded within the main-file.
+
+Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())
+  #include <Y.h>
+  class X {};
+Y.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td><td class="name" onclick="toggle('isExpansionInSystemHeader2')"><a name="isExpansionInSystemHeader2Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExpansionInSystemHeader2"><pre>Matches AST nodes that were expanded within system-header-files.
+
+Example matches Y but not X
+    (matcher = recordDecl(isExpansionInSystemHeader())
+  #include <SystemHeader.h>
+  class X {};
+SystemHeader.h:
+  class Y {};
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td><td class="name" onclick="toggle('equalsBoundNode2')"><a name="equalsBoundNode2Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
+<tr><td colspan="4" class="doc" id="equalsBoundNode2"><pre>Matches if a node equals a previously bound node.
+
+Matches a node if it equals the node previously bound to ID.
+
+Given
+  class X { int a; int b; };
+recordDecl(
+    has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
+    has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
+  matches the class X, as a and b have the same type.
+
+Note that when multiple matches are involved via forEach* matchers,
+equalsBoundNodes acts as a filter.
+For example:
+compoundStmt(
+    forEachDescendant(varDecl().bind("d")),
+    forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
+will trigger a match for each combination of variable declaration
+and reference to that variable declaration within a compound statement.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryExprOrTypeTraitExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ozJYicGNEZiesfoc3jwlioH71h2YF_Bwo3uMx2lHH8&e=">UnaryExprOrTypeTraitExpr</a>></td><td class="name" onclick="toggle('ofKind0')"><a name="ofKind0Anchor">ofKind</a></td><td>UnaryExprOrTypeTrait Kind</td></tr>
+<tr><td colspan="4" class="doc" id="ofKind0"><pre>Matches unary expressions of a certain kind.
+
+Given
+  int x;
+  int s = sizeof(x) + alignof(x)
+unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf))
+  matches sizeof(x)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=00k-a6RqklALT_xKLHKpoSboVGnWW9Fobx1Gshb3tz0&e=">UnaryOperator</a>></td><td class="name" onclick="toggle('hasOperatorName1')"><a name="hasOperatorName1Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
+<tr><td colspan="4" class="doc" id="hasOperatorName1"><pre>Matches the operator Name of operator expressions (binary or
+unary).
+
+Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
+  !(a || b)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>></td><td class="name" onclick="toggle('hasGlobalStorage0')"><a name="hasGlobalStorage0Anchor">hasGlobalStorage</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="hasGlobalStorage0"><pre>Matches a variable declaration that does not have local storage.
+
+Example matches y and z (matcher = varDecl(hasGlobalStorage())
+void f() {
+  int x;
+  static int y;
+}
+int z;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>></td><td class="name" onclick="toggle('hasLocalStorage0')"><a name="hasLocalStorage0Anchor">hasLocalStorage</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="hasLocalStorage0"><pre>Matches a variable declaration that has function scope and is a
+non-static local variable.
+
+Example matches x (matcher = varDecl(hasLocalStorage())
+void f() {
+  int x;
+  static int y;
+}
+int z;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>></td><td class="name" onclick="toggle('isDefinition1')"><a name="isDefinition1Anchor">isDefinition</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isDefinition1"><pre>Matches if a declaration has a body attached.
+
+Example matches A, va, fa
+  class A {};
+  class B;  Doesn't match, as it has no body.
+  int va;
+  extern int vb;  Doesn't match, as it doesn't define the variable.
+  void fa() {}
+  void fb();  Doesn't match, as it has no body.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=3t0axXNZnnKxUVZrVnEa5IBzG0Vxsz-hCMFhJ8Hv-Z4&e=">TagDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>></td><td class="name" onclick="toggle('isExplicitTemplateSpecialization1')"><a name="isExplicitTemplateSpecialization1Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization1"><pre>Matches explicit template specializations of function, class, or
+static member variable template instantiations.
+
+Given
+  template<typename T> void A(T t) { }
+  template<> void A(int N) { }
+functionDecl(isExplicitTemplateSpecialization())
+  matches the specialization A<int>().
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>></td><td class="name" onclick="toggle('isTemplateInstantiation1')"><a name="isTemplateInstantiation1Anchor">isTemplateInstantiation</a></td><td></td></tr>
+<tr><td colspan="4" class="doc" id="isTemplateInstantiation1"><pre>Matches template instantiations of function, class, or static
+member variable template instantiations.
+
+Given
+  template <typename T> class X {}; class A {}; X<A> x;
+or
+  template <typename T> class X {}; class A {}; template class X<A>;
+recordDecl(hasName("::X"), isTemplateInstantiation())
+  matches the template instantiation of X<A>.
+
+But given
+  template <typename T>  class X {}; class A {};
+  template <> class X<A> {}; X<A> x;
+recordDecl(hasName("::X"), isTemplateInstantiation())
+  does not match, as X<A> is an explicit template specialization.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>>
+</pre></td></tr>
+
+<!--END_NARROWING_MATCHERS -->
+</table>
+
+<!-- ======================================================================= -->
+<h2 id="traversal-matchers">AST Traversal Matchers</h2>
+<!-- ======================================================================= -->
+
+<p>Traversal matchers specify the relationship to other nodes that are
+reachable from the current node.</p>
+
+<p>Note that there are special traversal matchers (has, hasDescendant, forEach and
+forEachDescendant) which work on all nodes and allow users to write more generic
+match expressions.</p>
+
+<table>
+<tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
+<!-- START_TRAVERSAL_MATCHERS -->
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('eachOf0')"><a name="eachOf0Anchor">eachOf</a></td><td>Matcher<*>, ..., Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="eachOf0"><pre>Matches if any of the given matchers matches.
+
+Unlike anyOf, eachOf will generate a match result for each
+matching submatcher.
+
+For example, in:
+  class A { int a; int b; };
+The matcher:
+  recordDecl(eachOf(has(fieldDecl(hasName("a")).bind("v")),
+                    has(fieldDecl(hasName("b")).bind("v"))))
+will generate two results binding "v", the first of which binds
+the field declaration of a, the second the field declaration of
+b.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('forEachDescendant0')"><a name="forEachDescendant0Anchor">forEachDescendant</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="forEachDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
+provided matcher.
+
+Example matches X, A, B, C
+    (matcher = recordDecl(forEachDescendant(recordDecl(hasName("X")))))
+  class X {};  Matches X, because X::X is a class of name X inside X.
+  class A { class X {}; };
+  class B { class C { class X {}; }; };
+
+DescendantT must be an AST base type.
+
+As opposed to 'hasDescendant', 'forEachDescendant' will cause a match for
+each result that matches instead of only on the first one.
+
+Note: Recursively combined ForEachDescendant can cause many matches:
+  recordDecl(forEachDescendant(recordDecl(forEachDescendant(recordDecl()))))
+will match 10 times (plus injected class name matches) on:
+  class A { class B { class C { class D { class E {}; }; }; }; };
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
+provided matcher.
+
+Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))
+  class X {};  Matches X, because X::X is a class of name X inside X.
+  class Y { class X {}; };
+  class Z { class Y { class X {}; }; };  Does not match Z.
+
+ChildT must be an AST base type.
+
+As opposed to 'has', 'forEach' will cause a match for each result that
+matches instead of only on the first one.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('hasAncestor0')"><a name="hasAncestor0Anchor">hasAncestor</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="hasAncestor0"><pre>Matches AST nodes that have an ancestor that matches the provided
+matcher.
+
+Given
+void f() { if (true) { int x = 42; } }
+void g() { for (;;) { int x = 43; } }
+expr(integerLiteral(hasAncestor(ifStmt()))) matches 42, but not 43.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('hasDescendant0')"><a name="hasDescendant0Anchor">hasDescendant</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="hasDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
+provided matcher.
+
+Example matches X, Y, Z
+    (matcher = recordDecl(hasDescendant(recordDecl(hasName("X")))))
+  class X {};  Matches X, because X::X is a class of name X inside X.
+  class Y { class X {}; };
+  class Z { class Y { class X {}; }; };
+
+DescendantT must be an AST base type.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
+provided matcher.
+
+Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
+  class X {};  Matches X, because X::X is a class of name X inside X.
+  class Y { class X {}; };
+  class Z { class Y { class X {}; }; };  Does not match Z.
+
+ChildT must be an AST base type.
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher<*></td><td class="name" onclick="toggle('hasParent0')"><a name="hasParent0Anchor">hasParent</a></td><td>Matcher<*></td></tr>
+<tr><td colspan="4" class="doc" id="hasParent0"><pre>Matches AST nodes that have a parent that matches the provided
+matcher.
+
+Given
+void f() { for (;;) { int x = 42; if (true) { int x = 43; } } }
+compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }".
+
+Usable as: Any Matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArraySubscriptExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=D0ZFkE4Flfy9CLfNFFrAU_N4IKtHpEswjTPuLRUGzjQ&e=">ArraySubscriptExpr</a>></td><td class="name" onclick="toggle('hasBase0')"><a name="hasBase0Anchor">hasBase</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasBase0"><pre>Matches the base expression of an array subscript expression.
+
+Given
+  int i[5];
+  void f() { i[1] = 42; }
+arraySubscriptExpression(hasBase(implicitCastExpr(
+    hasSourceExpression(declRefExpr()))))
+  matches i[1] with the declRefExpr() matching i
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArraySubscriptExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=D0ZFkE4Flfy9CLfNFFrAU_N4IKtHpEswjTPuLRUGzjQ&e=">ArraySubscriptExpr</a>></td><td class="name" onclick="toggle('hasIndex0')"><a name="hasIndex0Anchor">hasIndex</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasIndex0"><pre>Matches the index expression of an array subscript expression.
+
+Given
+  int i[5];
+  void f() { i[1] = 42; }
+arraySubscriptExpression(hasIndex(integerLiteral()))
+  matches i[1] with the integerLiteral() matching 1
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=uqjYWCccFay3Yii4iTu2XiTbJOJ7a4s1LWYd9jGrk6U&e=">ArrayTypeLoc</a>></td><td class="name" onclick="toggle('hasElementTypeLoc0')"><a name="hasElementTypeLoc0Anchor">hasElementTypeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasElementTypeLoc0"><pre>Matches arrays and C99 complex types that have a specific element
+type.
+
+Given
+  struct A {};
+  A a[7];
+  int b[7];
+arrayType(hasElementType(builtinType()))
+  matches "int b[7]"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WuQo8D0cR_5O5krBpQfkx-oJchAk3u_9LzYIQZQdafY&e=">ArrayType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZfB-byrhNu_WlpJ0NmNvXlJcKfb1-WFvVqafx-1Umhg&e=">ComplexType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WuQo8D0cR_5O5krBpQfkx-oJchAk3u_9LzYIQZQdafY&e=">ArrayType</a>></td><td class="name" onclick="toggle('hasElementType0')"><a name="hasElementType0Anchor">hasElementType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasElementType0"><pre>Matches arrays and C99 complex types that have a specific element
+type.
+
+Given
+  struct A {};
+  A a[7];
+  int b[7];
+arrayType(hasElementType(builtinType()))
+  matches "int b[7]"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WuQo8D0cR_5O5krBpQfkx-oJchAk3u_9LzYIQZQdafY&e=">ArrayType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZfB-byrhNu_WlpJ0NmNvXlJcKfb1-WFvVqafx-1Umhg&e=">ComplexType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AtomicTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=YDGz3o5IKtl14XQ5fJ-lApUOk4lNHjvoDFuqLdQU_ng&e=">AtomicTypeLoc</a>></td><td class="name" onclick="toggle('hasValueTypeLoc0')"><a name="hasValueTypeLoc0Anchor">hasValueTypeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasValueTypeLoc0"><pre>Matches atomic types with a specific value type.
+
+Given
+  _Atomic(int) i;
+  _Atomic(float) f;
+atomicType(hasValueType(isInteger()))
+ matches "_Atomic(int) i"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AtomicType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JjxpxQkWzlszk62PQgDCo-tk04r_yvFhW4ESKNFtrPA&e=">AtomicType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AtomicType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JjxpxQkWzlszk62PQgDCo-tk04r_yvFhW4ESKNFtrPA&e=">AtomicType</a>></td><td class="name" onclick="toggle('hasValueType0')"><a name="hasValueType0Anchor">hasValueType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasValueType0"><pre>Matches atomic types with a specific value type.
+
+Given
+  _Atomic(int) i;
+  _Atomic(float) f;
+atomicType(hasValueType(isInteger()))
+ matches "_Atomic(int) i"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AtomicType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JjxpxQkWzlszk62PQgDCo-tk04r_yvFhW4ESKNFtrPA&e=">AtomicType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AutoType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=FQ3UabuDquGFFtjrw9uqDckcwo4aQ8-GSkCouKOw7ac&e=">AutoType</a>></td><td class="name" onclick="toggle('hasDeducedType0')"><a name="hasDeducedType0Anchor">hasDeducedType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasDeducedType0"><pre>Matches AutoType nodes where the deduced type is a specific type.
+
+Note: There is no TypeLoc for the deduced type and thus no
+getDeducedLoc() matcher.
+
+Given
+  auto a = 1;
+  auto b = 2.0;
+autoType(hasDeducedType(isInteger()))
+  matches "auto a"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1AutoType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=FQ3UabuDquGFFtjrw9uqDckcwo4aQ8-GSkCouKOw7ac&e=">AutoType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BinaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=UIxI7DnWERIBbGL2xiGeUTirmgf8eafokqWNzOxck28&e=">BinaryOperator</a>></td><td class="name" onclick="toggle('hasEitherOperand0')"><a name="hasEitherOperand0Anchor">hasEitherOperand</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasEitherOperand0"><pre>Matches if either the left hand side or the right hand side of a
+binary operator matches.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BinaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=UIxI7DnWERIBbGL2xiGeUTirmgf8eafokqWNzOxck28&e=">BinaryOperator</a>></td><td class="name" onclick="toggle('hasLHS0')"><a name="hasLHS0Anchor">hasLHS</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasLHS0"><pre>Matches the left hand side of binary operator expressions.
+
+Example matches a (matcher = binaryOperator(hasLHS()))
+  a || b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BinaryOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=UIxI7DnWERIBbGL2xiGeUTirmgf8eafokqWNzOxck28&e=">BinaryOperator</a>></td><td class="name" onclick="toggle('hasRHS0')"><a name="hasRHS0Anchor">hasRHS</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasRHS0"><pre>Matches the right hand side of binary operator expressions.
+
+Example matches b (matcher = binaryOperator(hasRHS()))
+  a || b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=e9IO1M2w1MHWX7AqAfPUgaHSqzqknU-hV5R7rRGs_wM&e=">BlockPointerTypeLoc</a>></td><td class="name" onclick="toggle('pointeeLoc0')"><a name="pointeeLoc0Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointeeLoc0"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>></td><td class="name" onclick="toggle('pointee0')"><a name="pointee0Anchor">pointee</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointee0"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>></td><td class="name" onclick="toggle('hasAnyArgument1')"><a name="hasAnyArgument1Anchor">hasAnyArgument</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnyArgument1"><pre>Matches any argument of a call expression or a constructor call
+expression.
+
+Given
+  void x(int, int, int) { int y; x(1, y, 42); }
+callExpr(hasAnyArgument(declRefExpr()))
+  matches x(1, y, 42)
+with hasAnyArgument(...)
+  matching y
+
+FIXME: Currently this will ignore parentheses and implicit casts on
+the argument before applying the inner matcher. We'll want to remove
+this to allow for greater control by the user once ignoreImplicit()
+has been implemented.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>></td><td class="name" onclick="toggle('hasArgument1')"><a name="hasArgument1Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasArgument1"><pre>Matches the n'th argument of a call expression or a constructor
+call expression.
+
+Example matches y in x(y)
+    (matcher = callExpr(hasArgument(0, declRefExpr())))
+  void x(int) { int y; x(y); }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>></td><td class="name" onclick="toggle('hasDeclaration12')"><a name="hasDeclaration12Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration12"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructorDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=wdU4D0RLNlXeE4SqglJMkvak8Fqk4zuhYPZ3ObgDSFc&e=">CXXConstructorDecl</a>></td><td class="name" onclick="toggle('forEachConstructorInitializer0')"><a name="forEachConstructorInitializer0Anchor">forEachConstructorInitializer</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="forEachConstructorInitializer0"><pre>Matches each constructor initializer in a constructor definition.
+
+Given
+  class A { A() : i(42), j(42) {} int i; int j; };
+constructorDecl(forEachConstructorInitializer(forField(decl().bind("x"))))
+  will trigger two matches, binding for 'i' and 'j' respectively.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructorDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=wdU4D0RLNlXeE4SqglJMkvak8Fqk4zuhYPZ3ObgDSFc&e=">CXXConstructorDecl</a>></td><td class="name" onclick="toggle('hasAnyConstructorInitializer0')"><a name="hasAnyConstructorInitializer0Anchor">hasAnyConstructorInitializer</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnyConstructorInitializer0"><pre>Matches a constructor initializer.
+
+Given
+  struct Foo {
+    Foo() : foo_(1) { }
+    int foo_;
+  };
+recordDecl(has(constructorDecl(hasAnyConstructorInitializer(anything()))))
+  record matches Foo, hasAnyConstructorInitializer matches foo_(1)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('forField0')"><a name="forField0Anchor">forField</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FieldDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cfh-ynUdPglaKoEExhLIATnM70Wa4o1pL_yyRTpDtNg&e=">FieldDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="forField0"><pre>Matches the field declaration of a constructor initializer.
+
+Given
+  struct Foo {
+    Foo() : foo_(1) { }
+    int foo_;
+  };
+recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
+    forField(hasName("foo_"))))))
+  matches Foo
+with forField matching foo_
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXCtorInitializer.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TcA_T6f4AULh1Q54BoWkYWCSQGHvBcFOpTgwIIl-NU0&e=">CXXCtorInitializer</a>></td><td class="name" onclick="toggle('withInitializer0')"><a name="withInitializer0Anchor">withInitializer</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="withInitializer0"><pre>Matches the initializer expression of a constructor initializer.
+
+Given
+  struct Foo {
+    Foo() : foo_(1) { }
+    int foo_;
+  };
+recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
+    withInitializer(integerLiteral(equals(1)))))))
+  matches Foo
+with withInitializer matching (1)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXForRangeStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hNzjQWIgI0ImfmDvyBOW5jmEebJESx0xXTT_ta23VvY&e=">CXXForRangeStmt</a>></td><td class="name" onclick="toggle('hasBody3')"><a name="hasBody3Anchor">hasBody</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasBody3"><pre>Matches a 'for', 'while', or 'do while' statement that has
+a given body.
+
+Given
+  for (;;) {}
+hasBody(compoundStmt())
+  matches 'for (;;) {}'
+with compoundStmt()
+  matching '{}'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXForRangeStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hNzjQWIgI0ImfmDvyBOW5jmEebJESx0xXTT_ta23VvY&e=">CXXForRangeStmt</a>></td><td class="name" onclick="toggle('hasLoopVariable0')"><a name="hasLoopVariable0Anchor">hasLoopVariable</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1VarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=n18nb-to5eIwVF_4Iuuu-3sectrvHZvvFk9MHwYq2bw&e=">VarDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasLoopVariable0"><pre>Matches the initialization statement of a for loop.
+
+Example:
+    forStmt(hasLoopVariable(anything()))
+matches 'int x' in
+    for (int x : a) { }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXForRangeStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hNzjQWIgI0ImfmDvyBOW5jmEebJESx0xXTT_ta23VvY&e=">CXXForRangeStmt</a>></td><td class="name" onclick="toggle('hasRangeInit0')"><a name="hasRangeInit0Anchor">hasRangeInit</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasRangeInit0"><pre>Matches the range initialization statement of a for loop.
+
+Example:
+    forStmt(hasRangeInit(anything()))
+matches 'a' in
+    for (int x : a) { }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMemberCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cp8xlGMg1aBfQ-CpexWzo2YIHhgbo_cgnS7e7CbcrLo&e=">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMemberCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cp8xlGMg1aBfQ-CpexWzo2YIHhgbo_cgnS7e7CbcrLo&e=">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('on0')"><a name="on0Anchor">on</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
+
+Example matches y.x() (matcher = callExpr(on(hasType(recordDecl(hasName("Y"))))))
+  class Y { public: void x(); };
+  void z() { Y y; y.x(); }",
+
+FIXME: Overload to allow directly matching types?
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMemberCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cp8xlGMg1aBfQ-CpexWzo2YIHhgbo_cgnS7e7CbcrLo&e=">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('thisPointerType1')"><a name="thisPointerType1Anchor">thisPointerType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="thisPointerType1"><pre>Overloaded to match the type's declaration.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMemberCallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=cp8xlGMg1aBfQ-CpexWzo2YIHhgbo_cgnS7e7CbcrLo&e=">CXXMemberCallExpr</a>></td><td class="name" onclick="toggle('thisPointerType0')"><a name="thisPointerType0Anchor">thisPointerType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="thisPointerType0"><pre>Matches if the expression's type either matches the specified
+matcher, or is a pointer to a type that matches the InnerMatcher.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>></td><td class="name" onclick="toggle('ofClass0')"><a name="ofClass0Anchor">ofClass</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="ofClass0"><pre>Matches the class declaration that the given method declaration
+belongs to.
+
+FIXME: Generalize this for other kinds of declarations.
+FIXME: What other kind of declarations would we need to generalize
+this to?
+
+Example matches A() in the last line
+    (matcher = constructExpr(hasDeclaration(methodDecl(
+        ofClass(hasName("A"))))))
+  class A {
+   public:
+    A();
+  };
+  A a = A();
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('hasMethod0')"><a name="hasMethod0Anchor">hasMethod</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXMethodDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=TNDitwk99BMGVza_2rhefVtlwQ2VCymnD_xMV7JHgfc&e=">CXXMethodDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasMethod0"><pre>Matches the first method of a class or struct that satisfies InnerMatcher.
+
+Given:
+  class A { void func(); };
+  class B { void member(); };
+
+recordDecl(hasMethod(hasName("func"))) matches the declaration of A
+but not B.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('isDerivedFrom0')"><a name="isDerivedFrom0Anchor">isDerivedFrom</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamedDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sL6uAKZbbnobqmoPp-FyciHC0wE51_wpmfOcZ6g7OkY&e=">NamedDecl</a>> Base</td></tr>
+<tr><td colspan="4" class="doc" id="isDerivedFrom0"><pre>Matches C++ classes that are directly or indirectly derived from
+a class matching Base.
+
+Note that a class is not considered to be derived from itself.
+
+Example matches Y, Z, C (Base == hasName("X"))
+  class X;
+  class Y : public X {};  directly derived
+  class Z : public Y {};  indirectly derived
+  typedef X A;
+  typedef A B;
+  class C : public B {};  derived from a typedef of X
+
+In the following example, Bar matches isDerivedFrom(hasName("X")):
+  class Foo;
+  typedef Foo X;
+  class Bar : public Foo {};  derived from a type that X is a typedef of
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXRecordDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QT2ZGilzOVMAtIWikKX0dTxEyBje2VS9MbawTPkeB2Y&e=">CXXRecordDecl</a>></td><td class="name" onclick="toggle('isSameOrDerivedFrom0')"><a name="isSameOrDerivedFrom0Anchor">isSameOrDerivedFrom</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamedDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sL6uAKZbbnobqmoPp-FyciHC0wE51_wpmfOcZ6g7OkY&e=">NamedDecl</a>> Base</td></tr>
+<tr><td colspan="4" class="doc" id="isSameOrDerivedFrom0"><pre>Similar to isDerivedFrom(), but also matches classes that directly
+match Base.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>></td><td class="name" onclick="toggle('callee1')"><a name="callee1Anchor">callee</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="callee1"><pre>Matches if the call expression's callee's declaration matches the
+given matcher.
+
+Example matches y.x() (matcher = callExpr(callee(methodDecl(hasName("x")))))
+  class Y { public: void x(); };
+  void z() { Y y; y.x(); }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>></td><td class="name" onclick="toggle('callee0')"><a name="callee0Anchor">callee</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="callee0"><pre>Matches if the call expression's callee expression matches.
+
+Given
+  class Y { void x() { this->x(); x(); Y y; y.x(); } };
+  void f() { f(); }
+callExpr(callee(expr()))
+  matches this->x(), x(), y.x(), f()
+with callee(...)
+  matching this->x, x, y.x, f respectively
+
+Note: Callee cannot take the more general internal::Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>>
+because this introduces ambiguous overloads with calls to Callee taking a
+internal::Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>, as the matcher hierarchy is purely
+implemented in terms of implicit casts.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>></td><td class="name" onclick="toggle('hasAnyArgument0')"><a name="hasAnyArgument0Anchor">hasAnyArgument</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnyArgument0"><pre>Matches any argument of a call expression or a constructor call
+expression.
+
+Given
+  void x(int, int, int) { int y; x(1, y, 42); }
+callExpr(hasAnyArgument(declRefExpr()))
+  matches x(1, y, 42)
+with hasAnyArgument(...)
+  matching y
+
+FIXME: Currently this will ignore parentheses and implicit casts on
+the argument before applying the inner matcher. We'll want to remove
+this to allow for greater control by the user once ignoreImplicit()
+has been implemented.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>></td><td class="name" onclick="toggle('hasArgument0')"><a name="hasArgument0Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasArgument0"><pre>Matches the n'th argument of a call expression or a constructor
+call expression.
+
+Example matches y in x(y)
+    (matcher = callExpr(hasArgument(0, declRefExpr())))
+  void x(int) { int y; x(y); }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>></td><td class="name" onclick="toggle('hasDeclaration13')"><a name="hasDeclaration13Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration13"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CaseStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r_3vDvIgXYUhcQPsXAbv2PXVIdjouFPCzUqOi_Zwglo&e=">CaseStmt</a>></td><td class="name" onclick="toggle('hasCaseConstant0')"><a name="hasCaseConstant0Anchor">hasCaseConstant</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasCaseConstant0"><pre>If the given case statement does not use the GNU case range
+extension, matches the constant given in the statement.
+
+Given
+  switch (1) { case 1: case 1+1: case 3 ... 4: ; }
+caseStmt(hasCaseConstant(integerLiteral()))
+  matches "case 1:"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=XJpdhmt82MmAYMRoLv-wsCCQZLS_g8mWCLyJ9YJxmPc&e=">CastExpr</a>></td><td class="name" onclick="toggle('hasSourceExpression0')"><a name="hasSourceExpression0Anchor">hasSourceExpression</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasSourceExpression0"><pre>Matches if the cast's source expression matches the given matcher.
+
+Example: matches "a string" (matcher =
+                                 hasSourceExpression(constructExpr()))
+class URL { URL(string); };
+URL url = "a string";
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ClassTemplateSpecializationDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=iich7Kuv3wmbxswgfACtBwW8s4624IIuhFHoZV_uYFU&e=">ClassTemplateSpecializationDecl</a>></td><td class="name" onclick="toggle('hasAnyTemplateArgument0')"><a name="hasAnyTemplateArgument0Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnyTemplateArgument0"><pre>Matches classTemplateSpecializations that have at least one
+TemplateArgument matching the given InnerMatcher.
+
+Given
+  template<typename T> class A {};
+  template<> class A<double> {};
+  A<int> a;
+classTemplateSpecializationDecl(hasAnyTemplateArgument(
+    refersToType(asString("int"))))
+  matches the specialization A<int>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ClassTemplateSpecializationDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=iich7Kuv3wmbxswgfACtBwW8s4624IIuhFHoZV_uYFU&e=">ClassTemplateSpecializationDecl</a>></td><td class="name" onclick="toggle('hasTemplateArgument0')"><a name="hasTemplateArgument0Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasTemplateArgument0"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
+matches the given InnerMatcher.
+
+Given
+  template<typename T, typename U> class A {};
+  A<bool, int> b;
+  A<int, bool> c;
+classTemplateSpecializationDecl(hasTemplateArgument(
+    1, refersToType(asString("int"))))
+  matches the specialization A<bool, int>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4hwWraiGkqmFDK98bmh6f5BDFjXz6ej-FCjOtFfv9So&e=">ComplexTypeLoc</a>></td><td class="name" onclick="toggle('hasElementTypeLoc1')"><a name="hasElementTypeLoc1Anchor">hasElementTypeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasElementTypeLoc1"><pre>Matches arrays and C99 complex types that have a specific element
+type.
+
+Given
+  struct A {};
+  A a[7];
+  int b[7];
+arrayType(hasElementType(builtinType()))
+  matches "int b[7]"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WuQo8D0cR_5O5krBpQfkx-oJchAk3u_9LzYIQZQdafY&e=">ArrayType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZfB-byrhNu_WlpJ0NmNvXlJcKfb1-WFvVqafx-1Umhg&e=">ComplexType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZfB-byrhNu_WlpJ0NmNvXlJcKfb1-WFvVqafx-1Umhg&e=">ComplexType</a>></td><td class="name" onclick="toggle('hasElementType1')"><a name="hasElementType1Anchor">hasElementType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="hasElementType1"><pre>Matches arrays and C99 complex types that have a specific element
+type.
+
+Given
+  struct A {};
+  A a[7];
+  int b[7];
+arrayType(hasElementType(builtinType()))
+  matches "int b[7]"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ArrayType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WuQo8D0cR_5O5krBpQfkx-oJchAk3u_9LzYIQZQdafY&e=">ArrayType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ComplexType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZfB-byrhNu_WlpJ0NmNvXlJcKfb1-WFvVqafx-1Umhg&e=">ComplexType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CompoundStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=RRC2pChHSasOnIhbp-1f9rUOVanGz_XC18wqZ0uUf4Q&e=">CompoundStmt</a>></td><td class="name" onclick="toggle('hasAnySubstatement0')"><a name="hasAnySubstatement0Anchor">hasAnySubstatement</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnySubstatement0"><pre>Matches compound statements where at least one substatement matches
+a given matcher.
+
+Given
+  { {}; 1+2; }
+hasAnySubstatement(compoundStmt())
+  matches '{ {}; 1+2; }'
+with compoundStmt()
+  matching '{}'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ConditionalOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=uan5nWo_jvKTXWgHW1OnAwECfPFl138RFEh3GyPgLkE&e=">ConditionalOperator</a>></td><td class="name" onclick="toggle('hasCondition4')"><a name="hasCondition4Anchor">hasCondition</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasCondition4"><pre>Matches the condition expression of an if statement, for loop,
+or conditional operator.
+
+Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
+  if (true) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ConditionalOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=uan5nWo_jvKTXWgHW1OnAwECfPFl138RFEh3GyPgLkE&e=">ConditionalOperator</a>></td><td class="name" onclick="toggle('hasFalseExpression0')"><a name="hasFalseExpression0Anchor">hasFalseExpression</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasFalseExpression0"><pre>Matches the false branch expression of a conditional operator.
+
+Example matches b
+  condition ? a : b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ConditionalOperator.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=uan5nWo_jvKTXWgHW1OnAwECfPFl138RFEh3GyPgLkE&e=">ConditionalOperator</a>></td><td class="name" onclick="toggle('hasTrueExpression0')"><a name="hasTrueExpression0Anchor">hasTrueExpression</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasTrueExpression0"><pre>Matches the true branch expression of a conditional operator.
+
+Example matches a
+  condition ? a : b
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>></td><td class="name" onclick="toggle('hasDeclaration11')"><a name="hasDeclaration11Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration11"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>></td><td class="name" onclick="toggle('throughUsingDecl0')"><a name="throughUsingDecl0Anchor">throughUsingDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UsingShadowDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=L2MdSX6ZE0aYod-UMEObiO9wddyubDY5yQ7rxHlDo74&e=">UsingShadowDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="throughUsingDecl0"><pre>Matches a DeclRefExpr that refers to a declaration through a
+specific using shadow declaration.
+
+FIXME: This currently only works for functions. Fix.
+
+Given
+  namespace a { void f() {} }
+  using a::f;
+  void g() {
+    f();     Matches this ..
+    a::f();  .. but not this.
+  }
+declRefExpr(throughUsingDeclaration(anything()))
+  matches f()
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>></td><td class="name" onclick="toggle('to0')"><a name="to0Anchor">to</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="to0"><pre>Matches a DeclRefExpr that refers to a declaration that matches the
+specified matcher.
+
+Example matches x in if(x)
+    (matcher = declRefExpr(to(varDecl(hasName("x")))))
+  bool x;
+  if (x) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=5fjQFcu7he3b3EePkO7vmR_EmaJS-VoUflS__-ptp8w&e=">DeclStmt</a>></td><td class="name" onclick="toggle('containsDeclaration0')"><a name="containsDeclaration0Anchor">containsDeclaration</a></td><td>unsigned N, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="containsDeclaration0"><pre>Matches the n'th declaration of a declaration statement.
+
+Note that this does not work for global declarations because the AST
+breaks up multiple-declaration DeclStmt's into multiple single-declaration
+DeclStmt's.
+Example: Given non-global declarations
+  int a, b = 0;
+  int c;
+  int d = 2, e;
+declStmt(containsDeclaration(
+      0, varDecl(hasInitializer(anything()))))
+  matches only 'int d = 2, e;', and
+declStmt(containsDeclaration(1, varDecl()))
+  matches 'int a, b = 0' as well as 'int d = 2, e;'
+  but 'int c;' is not matched.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=5fjQFcu7he3b3EePkO7vmR_EmaJS-VoUflS__-ptp8w&e=">DeclStmt</a>></td><td class="name" onclick="toggle('hasSingleDecl0')"><a name="hasSingleDecl0Anchor">hasSingleDecl</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasSingleDecl0"><pre>Matches the Decl of a DeclStmt which has a single declaration.
+
+Given
+  int a, b;
+  int c;
+declStmt(hasSingleDecl(anything()))
+  matches 'int c;' but not 'int a, b;'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclaratorDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kEJjKd5CBpmheseILSyXT7zGrLJhbBOrpB09ECIotLo&e=">DeclaratorDecl</a>></td><td class="name" onclick="toggle('hasTypeLoc0')"><a name="hasTypeLoc0Anchor">hasTypeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>> Inner</td></tr>
+<tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of the declarator decl's type matches
+the inner matcher.
+
+Given
+  int x;
+declaratorDecl(hasTypeLoc(loc(asString("int"))))
+  matches int x
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>></td><td class="name" onclick="toggle('hasDeclContext0')"><a name="hasDeclContext0Anchor">hasDeclContext</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclContext0"><pre>Matches declarations whose declaration context, interpreted as a
+Decl, matches InnerMatcher.
+
+Given
+  namespace N {
+    namespace M {
+      class D {};
+    }
+  }
+
+recordDecl(hasDeclContext(namedDecl(hasName("M")))) matches the
+declaration of class D.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DoStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZdVkNxRonnkuFmZ3kcE8qMOyrcJhUpkagdp5lIm_3As&e=">DoStmt</a>></td><td class="name" onclick="toggle('hasBody0')"><a name="hasBody0Anchor">hasBody</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasBody0"><pre>Matches a 'for', 'while', or 'do while' statement that has
+a given body.
+
+Given
+  for (;;) {}
+hasBody(compoundStmt())
+  matches 'for (;;) {}'
+with compoundStmt()
+  matching '{}'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DoStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZdVkNxRonnkuFmZ3kcE8qMOyrcJhUpkagdp5lIm_3As&e=">DoStmt</a>></td><td class="name" onclick="toggle('hasCondition3')"><a name="hasCondition3Anchor">hasCondition</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasCondition3"><pre>Matches the condition expression of an if statement, for loop,
+or conditional operator.
+
+Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
+  if (true) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ElaboratedType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JHL6YwzIA4TWdFS-K_o-0z3kNucR4NG4tbN-q9MhExs&e=">ElaboratedType</a>></td><td class="name" onclick="toggle('hasQualifier0')"><a name="hasQualifier0Anchor">hasQualifier</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasQualifier0"><pre>Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
+matches InnerMatcher if the qualifier exists.
+
+Given
+  namespace N {
+    namespace M {
+      class D {};
+    }
+  }
+  N::M::D d;
+
+elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))
+matches the type of the variable declaration of d.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ElaboratedType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JHL6YwzIA4TWdFS-K_o-0z3kNucR4NG4tbN-q9MhExs&e=">ElaboratedType</a>></td><td class="name" onclick="toggle('namesType0')"><a name="namesType0Anchor">namesType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="namesType0"><pre>Matches ElaboratedTypes whose named type matches InnerMatcher.
+
+Given
+  namespace N {
+    namespace M {
+      class D {};
+    }
+  }
+  N::M::D d;
+
+elaboratedType(namesType(recordType(
+hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable
+declaration of d.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>></td><td class="name" onclick="toggle('hasDeclaration10')"><a name="hasDeclaration10Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration10"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ExplicitCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hXpFV7O4mjhtjCDW9FHpH46rCk9cL3QOzRBlf4ctN5E&e=">ExplicitCastExpr</a>></td><td class="name" onclick="toggle('hasDestinationType0')"><a name="hasDestinationType0Anchor">hasDestinationType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDestinationType0"><pre>Matches casts whose destination type matches a given matcher.
+
+(Note: Clang's AST refers to other conversions as "casts" too, and calls
+actual casts "explicit" casts.)
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>></td><td class="name" onclick="toggle('hasType2')"><a name="hasType2Anchor">hasType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasType2"><pre>Overloaded to match the declaration of the expression's or value
+declaration's type.
+
+In case of a value declaration (for example a variable declaration),
+this resolves one layer of indirection. For example, in the value
+declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
+while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
+of x."
+
+Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
+            and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
+ class X {};
+ void y(X &x) { x; X z; }
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ValueDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0as-mngjnYGP2uK46qDI8e6pq8xtyQpIHSfrHl5jZWo&e=">ValueDecl</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>></td><td class="name" onclick="toggle('hasType0')"><a name="hasType0Anchor">hasType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasType0"><pre>Matches if the expression's or declaration's type matches a type
+matcher.
+
+Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
+            and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
+ class X {};
+ void y(X &x) { x; X z; }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>></td><td class="name" onclick="toggle('ignoringImpCasts0')"><a name="ignoringImpCasts0Anchor">ignoringImpCasts</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="ignoringImpCasts0"><pre>Matches expressions that match InnerMatcher after any implicit casts
+are stripped off.
+
+Parentheses and explicit casts are not discarded.
+Given
+  int arr[5];
+  int a = 0;
+  char b = 0;
+  const int c = a;
+  int *d = arr;
+  long e = (long) 0l;
+The matchers
+   varDecl(hasInitializer(ignoringImpCasts(integerLiteral())))
+   varDecl(hasInitializer(ignoringImpCasts(declRefExpr())))
+would match the declarations for a, b, c, and d, but not e.
+While
+   varDecl(hasInitializer(integerLiteral()))
+   varDecl(hasInitializer(declRefExpr()))
+only match the declarations for b, c, and d.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>></td><td class="name" onclick="toggle('ignoringParenCasts0')"><a name="ignoringParenCasts0Anchor">ignoringParenCasts</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="ignoringParenCasts0"><pre>Matches expressions that match InnerMatcher after parentheses and
+casts are stripped off.
+
+Implicit and non-C Style casts are also discarded.
+Given
+  int a = 0;
+  char b = (0);
+  void* c = reinterpret_cast<char*>(0);
+  char d = char(0);
+The matcher
+   varDecl(hasInitializer(ignoringParenCasts(integerLiteral())))
+would match the declarations for a, b, c, and d.
+while
+   varDecl(hasInitializer(integerLiteral()))
+only match the declaration for a.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>></td><td class="name" onclick="toggle('ignoringParenImpCasts0')"><a name="ignoringParenImpCasts0Anchor">ignoringParenImpCasts</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="ignoringParenImpCasts0"><pre>Matches expressions that match InnerMatcher after implicit casts and
+parentheses are stripped off.
+
+Explicit casts are not discarded.
+Given
+  int arr[5];
+  int a = 0;
+  char b = (0);
+  const int c = a;
+  int *d = (arr);
+  long e = ((long) 0l);
+The matchers
+   varDecl(hasInitializer(ignoringParenImpCasts(integerLiteral())))
+   varDecl(hasInitializer(ignoringParenImpCasts(declRefExpr())))
+would match the declarations for a, b, c, and d, but not e.
+while
+   varDecl(hasInitializer(integerLiteral()))
+   varDecl(hasInitializer(declRefExpr()))
+would only match the declaration for a.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ForStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bEo2z0d9GPysj2XSX1L9Vhcrl1zUNhD6R2sEwvTM9f4&e=">ForStmt</a>></td><td class="name" onclick="toggle('hasBody1')"><a name="hasBody1Anchor">hasBody</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasBody1"><pre>Matches a 'for', 'while', or 'do while' statement that has
+a given body.
+
+Given
+  for (;;) {}
+hasBody(compoundStmt())
+  matches 'for (;;) {}'
+with compoundStmt()
+  matching '{}'
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ForStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bEo2z0d9GPysj2XSX1L9Vhcrl1zUNhD6R2sEwvTM9f4&e=">ForStmt</a>></td><td class="name" onclick="toggle('hasCondition1')"><a name="hasCondition1Anchor">hasCondition</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasCondition1"><pre>Matches the condition expression of an if statement, for loop,
+or conditional operator.
+
+Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
+  if (true) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ForStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bEo2z0d9GPysj2XSX1L9Vhcrl1zUNhD6R2sEwvTM9f4&e=">ForStmt</a>></td><td class="name" onclick="toggle('hasIncrement0')"><a name="hasIncrement0Anchor">hasIncrement</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasIncrement0"><pre>Matches the increment statement of a for loop.
+
+Example:
+    forStmt(hasIncrement(unaryOperator(hasOperatorName("++"))))
+matches '++x' in
+    for (x; x < N; ++x) { }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ForStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bEo2z0d9GPysj2XSX1L9Vhcrl1zUNhD6R2sEwvTM9f4&e=">ForStmt</a>></td><td class="name" onclick="toggle('hasLoopInit0')"><a name="hasLoopInit0Anchor">hasLoopInit</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasLoopInit0"><pre>Matches the initialization statement of a for loop.
+
+Example:
+    forStmt(hasLoopInit(declStmt()))
+matches 'int x = 0' in
+    for (int x = 0; x < N; ++x) { }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('hasAnyParameter0')"><a name="hasAnyParameter0Anchor">hasAnyParameter</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ParmVarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=p3LpBJY86PMPMcgw06k3MnV7jf9CNnwBmRyMvCY4q5s&e=">ParmVarDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnyParameter0"><pre>Matches any parameter of a function declaration.
+
+Does not match the 'this' parameter of a method.
+
+Given
+  class X { void f(int x, int y, int z) {} };
+methodDecl(hasAnyParameter(hasName("y")))
+  matches f(int x, int y, int z) {}
+with hasAnyParameter(...)
+  matching int y
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('hasParameter0')"><a name="hasParameter0Anchor">hasParameter</a></td><td>unsigned N, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ParmVarDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=p3LpBJY86PMPMcgw06k3MnV7jf9CNnwBmRyMvCY4q5s&e=">ParmVarDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasParameter0"><pre>Matches the n'th parameter of a function declaration.
+
+Given
+  class X { void f(int x) {} };
+methodDecl(hasParameter(0, hasType(varDecl())))
+  matches f(int x) {}
+with hasParameter(...)
+  matching int x
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1FunctionDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QPudg7sBk33VMLZGNPkaP13MQH5e2CtSO1W5kentPrU&e=">FunctionDecl</a>></td><td class="name" onclick="toggle('returns0')"><a name="returns0Anchor">returns</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="returns0"><pre>Matches the return type of a function declaration.
+
+Given:
+  class X { int f() { return 1; } };
+methodDecl(returns(asString("int")))
+  matches int f() { return 1; }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IfStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zlD8_LJYChXCv8mZwxdl3K-G-JgTCx3rgHSFo_OSbqo&e=">IfStmt</a>></td><td class="name" onclick="toggle('hasCondition0')"><a name="hasCondition0Anchor">hasCondition</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasCondition0"><pre>Matches the condition expression of an if statement, for loop,
+or conditional operator.
+
+Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
+  if (true) {}
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IfStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zlD8_LJYChXCv8mZwxdl3K-G-JgTCx3rgHSFo_OSbqo&e=">IfStmt</a>></td><td class="name" onclick="toggle('hasConditionVariableStatement0')"><a name="hasConditionVariableStatement0Anchor">hasConditionVariableStatement</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=5fjQFcu7he3b3EePkO7vmR_EmaJS-VoUflS__-ptp8w&e=">DeclStmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasConditionVariableStatement0"><pre>Matches the condition variable statement in an if statement.
+
+Given
+  if (A* a = GetAPointer()) {}
+hasConditionVariableStatement(...)
+  matches 'A* a = GetAPointer()'.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IfStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zlD8_LJYChXCv8mZwxdl3K-G-JgTCx3rgHSFo_OSbqo&e=">IfStmt</a>></td><td class="name" onclick="toggle('hasElse0')"><a name="hasElse0Anchor">hasElse</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasElse0"><pre>Matches the else-statement of an if statement.
+
+Examples matches the if statement
+  (matcher = ifStmt(hasElse(boolLiteral(equals(true)))))
+  if (false) false; else true;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1IfStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=zlD8_LJYChXCv8mZwxdl3K-G-JgTCx3rgHSFo_OSbqo&e=">IfStmt</a>></td><td class="name" onclick="toggle('hasThen0')"><a name="hasThen0Anchor">hasThen</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasThen0"><pre>Matches the then-statement of an if statement.
+
+Examples matches the if statement
+  (matcher = ifStmt(hasThen(boolLiteral(equals(true)))))
+  if (false) true; else false;
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ImplicitCastExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=ZkIMGZS-YHGmOtx2Iw4q4gFFZYoonFlsnMGmBzvqid8&e=">ImplicitCastExpr</a>></td><td class="name" onclick="toggle('hasImplicitDestinationType0')"><a name="hasImplicitDestinationType0Anchor">hasImplicitDestinationType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasImplicitDestinationType0"><pre>Matches implicit casts whose destination type matches a given
+matcher.
+
+FIXME: Unit test this matcher
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>></td><td class="name" onclick="toggle('hasDeclaration9')"><a name="hasDeclaration9Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration9"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>></td><td class="name" onclick="toggle('hasDeclaration8')"><a name="hasDeclaration8Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration8"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>></td><td class="name" onclick="toggle('hasDeclaration7')"><a name="hasDeclaration7Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration7"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>></td><td class="name" onclick="toggle('hasObjectExpression0')"><a name="hasObjectExpression0Anchor">hasObjectExpression</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasObjectExpression0"><pre>Matches a member expression where the object expression is
+matched by a given matcher.
+
+Given
+  struct X { int m; };
+  void f(X x) { x.m; m; }
+memberExpr(hasObjectExpression(hasType(recordDecl(hasName("X")))))))
+  matches "x.m" and "m"
+with hasObjectExpression(...)
+  matching "x" and the implicit object expression of "m" which has type X*.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>></td><td class="name" onclick="toggle('member0')"><a name="member0Anchor">member</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ValueDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0as-mngjnYGP2uK46qDI8e6pq8xtyQpIHSfrHl5jZWo&e=">ValueDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="member0"><pre>Matches a member expression where the member is matched by a
+given matcher.
+
+Given
+  struct { int first, second; } first, second;
+  int i(second.first);
+  int j(first.second);
+memberExpr(member(hasName("first")))
+  matches second.first
+  but not first.second (because the member name there is "second").
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=hJfYzehTgfFHAP_qoSNH1llDRXATDPfo9_hdyUudd3U&e=">MemberPointerTypeLoc</a>></td><td class="name" onclick="toggle('pointeeLoc1')"><a name="pointeeLoc1Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointeeLoc1"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>></td><td class="name" onclick="toggle('pointee1')"><a name="pointee1Anchor">pointee</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointee1"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifierLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=skBxpi_uRcXg8seiRXHjN0zLoWLULHrLYE4O3iV3UkM&e=">NestedNameSpecifierLoc</a>></td><td class="name" onclick="toggle('hasPrefix1')"><a name="hasPrefix1Anchor">hasPrefix</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifierLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=skBxpi_uRcXg8seiRXHjN0zLoWLULHrLYE4O3iV3UkM&e=">NestedNameSpecifierLoc</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasPrefix1"><pre>Matches on the prefix of a NestedNameSpecifierLoc.
+
+Given
+  struct A { struct B { struct C {}; }; };
+  A::B::C c;
+nestedNameSpecifierLoc(hasPrefix(loc(specifiesType(asString("struct A")))))
+  matches "A::"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifierLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=skBxpi_uRcXg8seiRXHjN0zLoWLULHrLYE4O3iV3UkM&e=">NestedNameSpecifierLoc</a>></td><td class="name" onclick="toggle('specifiesTypeLoc0')"><a name="specifiesTypeLoc0Anchor">specifiesTypeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="specifiesTypeLoc0"><pre>Matches nested name specifier locs that specify a type matching the
+given TypeLoc.
+
+Given
+  struct A { struct B { struct C {}; }; };
+  A::B::C c;
+nestedNameSpecifierLoc(specifiesTypeLoc(loc(type(
+  hasDeclaration(recordDecl(hasName("A")))))))
+  matches "A::"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>></td><td class="name" onclick="toggle('hasPrefix0')"><a name="hasPrefix0Anchor">hasPrefix</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasPrefix0"><pre>Matches on the prefix of a NestedNameSpecifier.
+
+Given
+  struct A { struct B { struct C {}; }; };
+  A::B::C c;
+nestedNameSpecifier(hasPrefix(specifiesType(asString("struct A")))) and
+  matches "A::"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>></td><td class="name" onclick="toggle('specifiesNamespace0')"><a name="specifiesNamespace0Anchor">specifiesNamespace</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NamespaceDecl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=oNNR1jZ2ZvLe0efsOHb5brjhRKM0u6wE9aAgvToi9rg&e=">NamespaceDecl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="specifiesNamespace0"><pre>Matches nested name specifiers that specify a namespace matching the
+given namespace matcher.
+
+Given
+  namespace ns { struct A {}; }
+  ns::A a;
+nestedNameSpecifier(specifiesNamespace(hasName("ns")))
+  matches "ns::"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1NestedNameSpecifier.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=LBLZFGgupU62PHEjaQhR3O7HXmNbY-4rmrg_3RUQ1RM&e=">NestedNameSpecifier</a>></td><td class="name" onclick="toggle('specifiesType0')"><a name="specifiesType0Anchor">specifiesType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="specifiesType0"><pre>Matches nested name specifiers that specify a type matching the
+given QualType matcher without qualifiers.
+
+Given
+  struct A { struct B { struct C {}; }; };
+  A::B::C c;
+nestedNameSpecifier(specifiesType(hasDeclaration(recordDecl(hasName("A")))))
+  matches "A::"
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ParenType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=x-8drx9z1G0HpYgi53qaEZFXY1jzTNwpiT7-GKpEwjc&e=">ParenType</a>></td><td class="name" onclick="toggle('innerType0')"><a name="innerType0Anchor">innerType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="innerType0"><pre>Matches ParenType nodes where the inner type is a specific type.
+
+Given
+  int (*ptr_to_array)[4];
+  int (*ptr_to_func)(int);
+
+varDecl(hasType(pointsTo(parenType(innerType(functionType()))))) matches
+ptr_to_func but not ptr_to_array.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ParenType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=x-8drx9z1G0HpYgi53qaEZFXY1jzTNwpiT7-GKpEwjc&e=">ParenType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=UHIzN6YbFwvN2VZG75YTQUDgfnmOc42wPPA5qlgwpk8&e=">PointerTypeLoc</a>></td><td class="name" onclick="toggle('pointeeLoc2')"><a name="pointeeLoc2Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointeeLoc2"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>></td><td class="name" onclick="toggle('pointee2')"><a name="pointee2Anchor">pointee</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointee2"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('hasCanonicalType0')"><a name="hasCanonicalType0Anchor">hasCanonicalType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasCanonicalType0"><pre>Matches QualTypes whose canonical type matches InnerMatcher.
+
+Given:
+  typedef int &int_ref;
+  int a;
+  int_ref b = a;
+
+varDecl(hasType(qualType(referenceType()))))) will not match the
+declaration of b but varDecl(hasType(qualType(hasCanonicalType(referenceType())))))) does.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('hasDeclaration6')"><a name="hasDeclaration6Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration6"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('pointsTo1')"><a name="pointsTo1Anchor">pointsTo</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="pointsTo1"><pre>Overloaded to match the pointee type's declaration.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('pointsTo0')"><a name="pointsTo0Anchor">pointsTo</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="pointsTo0"><pre>Matches if the matched type is a pointer type and the pointee type
+matches the specified matcher.
+
+Example matches y->x()
+    (matcher = callExpr(on(hasType(pointsTo(recordDecl(hasName("Y")))))))
+  class Y { public: void x(); };
+  void z() { Y *y; y->x(); }
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('references1')"><a name="references1Anchor">references</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="references1"><pre>Overloaded to match the referenced type's declaration.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>></td><td class="name" onclick="toggle('references0')"><a name="references0Anchor">references</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="references0"><pre>Matches if the matched type is a reference type and the referenced
+type matches the specified matcher.
+
+Example matches X &x and const X &y
+    (matcher = varDecl(hasType(references(recordDecl(hasName("X"))))))
+  class X {
+    void a(X b) {
+      X &x = b;
+      const X &y = b;
+    }
+  };
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>></td><td class="name" onclick="toggle('hasDeclaration5')"><a name="hasDeclaration5Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceTypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=1px2b9aKhSUsMBKvkplHLkD7zdSqNtTieQCOdYUNTIw&e=">ReferenceTypeLoc</a>></td><td class="name" onclick="toggle('pointeeLoc3')"><a name="pointeeLoc3Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypeLoc.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=9cyDyn8VotF9KS7QPTOT8vRfgoOuiReq6aL9WPH0sHc&e=">TypeLoc</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointeeLoc3"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>></td><td class="name" onclick="toggle('pointee3')"><a name="pointee3Anchor">pointee</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Type.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=sIMleLTz5uw7chIwCoyo9bHjn5bGfJIAljihUo5fyi0&e=">Type</a>></td></tr>
+<tr><td colspan="4" class="doc" id="pointee3"><pre>Narrows PointerType (and similar) matchers to those where the
+pointee matches a given matcher.
+
+Given
+  int *a;
+  int const *b;
+  float const *f;
+pointerType(pointee(isConstQualified(), isInteger()))
+  matches "int const *b"
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1BlockPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=WnCzSJeORWNyvTBHulPhEHkKWDhXv_UwSahCNo8txBc&e=">BlockPointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberPointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=o2HXAlvLdXR-8UNc2gOPbAwlXw3-FAI_Obfdy9mG3tU&e=">MemberPointerType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1PointerType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=mHh_VKCcPLsigEeZ21Nl0XjaT1jQ5LZlaUthw2HJ8xo&e=">PointerType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1ReferenceType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=lhpuz7BEVS0fh71CuFwSiE3M1Pj5-qehJ0LhfQnTkpM&e=">ReferenceType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('alignOfExpr0')"><a name="alignOfExpr0Anchor">alignOfExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryExprOrTypeTraitExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ozJYicGNEZiesfoc3jwlioH71h2YF_Bwo3uMx2lHH8&e=">UnaryExprOrTypeTraitExpr</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="alignOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
+alignof.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Stmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJ7rBhKvwgdPijeNYxt1Hm7RxuztffyhhaNFVIAa_us&e=">Stmt</a>></td><td class="name" onclick="toggle('sizeOfExpr0')"><a name="sizeOfExpr0Anchor">sizeOfExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnaryExprOrTypeTraitExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ozJYicGNEZiesfoc3jwlioH71h2YF_Bwo3uMx2lHH8&e=">UnaryExprOrTypeTraitExpr</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="sizeOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
+sizeof.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1SwitchStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q5_o__QDuz6QzM16YxKr2CMC1pTPcrTekMwVwZqldUU&e=">SwitchStmt</a>></td><td class="name" onclick="toggle('forEachSwitchCase0')"><a name="forEachSwitchCase0Anchor">forEachSwitchCase</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1SwitchCase.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=PKBOyUXWdt-V1BZC1kB_17OFMahC3thQ_SFf8_dVhqs&e=">SwitchCase</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="forEachSwitchCase0"><pre>Matches each case or default statement belonging to the given switch
+statement. This matcher may produce multiple matches.
+
+Given
+  switch (1) { case 1: case 2: default: switch (2) { case 3: case 4: ; } }
+switchStmt(forEachSwitchCase(caseStmt().bind("c"))).bind("s")
+  matches four times, with "c" binding each of "case 1:", "case 2:",
+"case 3:" and "case 4:", and "s" respectively binding "switch (1)",
+"switch (1)", "switch (2)" and "switch (2)".
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>></td><td class="name" onclick="toggle('hasDeclaration4')"><a name="hasDeclaration4Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('isExpr0')"><a name="isExpr0Anchor">isExpr</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Expr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=yzB0_42_DKj91PWOY7vUWTzYOxkW6kzbZOfDuqwiH_o&e=">Expr</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="isExpr0"><pre>Matches a sugar TemplateArgument that refers to a certain expression.
+
+Given
+  template<typename T> struct A {};
+  struct B { B* next; };
+  A<&B::next> a;
+templateSpecializationType(hasAnyTemplateArgument(
+  isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next"))))))))
+  matches the specialization A<&B::next> with fieldDecl(...) matching
+    B::next
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('refersToDeclaration0')"><a name="refersToDeclaration0Anchor">refersToDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="refersToDeclaration0"><pre>Matches a canonical TemplateArgument that refers to a certain
+declaration.
+
+Given
+  template<typename T> struct A {};
+  struct B { B* next; };
+  A<&B::next> a;
+classTemplateSpecializationDecl(hasAnyTemplateArgument(
+    refersToDeclaration(fieldDecl(hasName("next"))))
+  matches the specialization A<&B::next> with fieldDecl(...) matching
+    B::next
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('refersToIntegralType0')"><a name="refersToIntegralType0Anchor">refersToIntegralType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="refersToIntegralType0"><pre>Matches a TemplateArgument that referes to an integral type.
+
+Given
+  template<int T> struct A {};
+  C<42> c;
+classTemplateSpecializationDecl(
+  hasAnyTemplateArgument(refersToIntegralType(asString("int"))))
+  matches the implicit instantiation of C in C<42>.
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>></td><td class="name" onclick="toggle('refersToType0')"><a name="refersToType0Anchor">refersToType</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="refersToType0"><pre>Matches a TemplateArgument that refers to a certain type.
+
+Given
+  struct X {};
+  template<typename T> struct A {};
+  A<X> a;
+classTemplateSpecializationDecl(hasAnyTemplateArgument(
+    refersToType(class(hasName("X")))))
+  matches the specialization A<X>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasAnyTemplateArgument1')"><a name="hasAnyTemplateArgument1Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations that have at least one
+TemplateArgument matching the given InnerMatcher.
+
+Given
+  template<typename T> class A {};
+  template<> class A<double> {};
+  A<int> a;
+classTemplateSpecializationDecl(hasAnyTemplateArgument(
+    refersToType(asString("int"))))
+  matches the specialization A<int>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasDeclaration3')"><a name="hasDeclaration3Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1RecordType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=0Ky2cJBb7RGL5bvhN61ul8qtvOCnfNknX6bcl0Leog4&e=">RecordType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TagType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=r1yz-O2X6opYN-7HeU_rGUD72nwpM5Lpm7VBchbz7u0&e=">TagType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TypedefType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=k2_1fQPgfsiu8Use-rVJQRj49P2_PRlxy757JkEay24&e=">TypedefType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1UnresolvedUsingType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8TTLpl6eu-oIWxxq5_OG8Vx2kyq8JiW417PW2Hrn-3U&e=">UnresolvedUsingType</a>>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateSpecializationType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=raOiDkUe5IshfSoOrgxpUTDkOgjg84kOOGjA8ncxSZ8&e=">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasTemplateArgument1')"><a name="hasTemplateArgument1Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateArgument.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=jP93p-4UzKWY5KWXMfG8G4vmMXzYy3ECCStKWkBh6tk&e=">TemplateArgument</a>> InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasTemplateArgument1"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
+matches the given InnerMatcher.
+
+Given
+  template<typename T, typename U> class A {};
+  A<bool, int> b;
+  A<int, bool> c;
+classTemplateSpecializationDecl(hasTemplateArgument(
+    1, refersToType(asString("int"))))
+  matches the specialization A<bool, int>
+</pre></td></tr>
+
+
+<tr><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1TemplateTypeParmType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=2yetRB9rh0ZTtZyJuuwFcHWmoYxRMvZzyPj8m9egNxY&e=">TemplateTypeParmType</a>></td><td class="name" onclick="toggle('hasDeclaration2')"><a name="hasDeclaration2Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1Decl.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=QgFRhBt7tXc46jQsU7dEE72_jbnDHvV8gBlBE9SUDs0&e=">Decl</a>>  InnerMatcher</td></tr>
+<tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a node if the declaration associated with that node
+matches the given matcher.
+
+The associated declaration is:
+- for type nodes, the declaration of the underlying type
+- for CallExpr, the declaration of the callee
+- for MemberExpr, the declaration of the referenced member
+- for CXXConstructExpr, the declaration of the constructor
+
+Also usable as Matcher<T> for any T supporting the getDecl() member
+function. e.g. various subtypes of clang::Type and various expressions.
+
+Usable as: Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CallExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=onP8LBMI1NELx1rZ_a75MsePRD6uRDPD-RicfIRGzXw&e=">CallExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1CXXConstructExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=kJEZLQsCbwoq-8cyafhvE52q8n8ChCopAcwVPCGxHew&e=">CXXConstructExpr</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1DeclRefExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=i4ESRAp1-7NQgPkQTDYXNCoeXpvkuHMM_C5usb7ghHM&e=">DeclRefExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1EnumType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=JbwnLdKaCqsMSWFdaf48IOPTrF_rVrPxftZCAb4th1c&e=">EnumType</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1InjectedClassNameType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=4ln10TdimwBlT3DWiif34OgOD2LoibZ2gt8ItfFIrpY&e=">InjectedClassNameType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1LabelStmt.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=8RQ106qbOGkA6LOwIiTUYtKzj7MrS96UkmQvC627Jsw&e=">LabelStmt</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1MemberExpr.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=bThaoCe3V1vhQas6jsYsGeTB2_2O6Qk6XrrzL3wMJgw&e=">MemberExpr</a>>, Matcher&lt<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__clang.llvm.org_doxygen_classclang-5F1-5F1QualType.html&d=AwMDaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=3XeLWbMhduRua5g90vhEY3QNDoBvG-n_Sz2KqANa_AQ&s=Q-7lfrqWuVoECtg80z4eidSv3ylcMlWMg2NarxlucEk&e=">QualType</a>>,
+  Matcher&lt<a href="https://urldefense.proofpoint.