Home | History | Annotate | Download | only in docs
      1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
      2           "http://www.w3.org/TR/html4/strict.dtd">
      3 <html>
      4 <head>
      5 <title>AST Matcher Reference</title>
      6 <link type="text/css" rel="stylesheet" href="../menu.css" />
      7 <link type="text/css" rel="stylesheet" href="../content.css" />
      8 <style type="text/css">
      9 td {
     10   padding: .33em;
     11 }
     12 td.doc {
     13   display: none;
     14   border-bottom: 1px solid black;
     15 }
     16 td.name:hover {
     17   color: blue;
     18   cursor: pointer;
     19 }
     20 </style>
     21 <script type="text/javascript">
     22 function toggle(id) {
     23   if (!id) return;
     24   row = document.getElementById(id);
     25   if (row.style.display != 'table-cell')
     26     row.style.display = 'table-cell';
     27   else
     28     row.style.display = 'none';
     29 }
     30 </script>
     31 </head>
     32 <body onLoad="toggle(location.hash.substring(1, location.hash.length - 6))">
     33 
     34 <!--#include virtual="../menu.html.incl"-->
     35 
     36 <div id="content">
     37 
     38 <h1>AST Matcher Reference</h1>
     39 
     40 <p>This document shows all currently implemented matchers. The matchers are grouped
     41 by category and node type they match. You can click on matcher names to show the
     42 matcher's source documentation.</p>
     43 
     44 <p>There are three different basic categories of matchers:
     45 <ul>
     46 <li><a href="#decl-matchers">Node Matchers:</a> Matchers that match a specific type of AST node.</li>
     47 <li><a href="#narrowing-matchers">Narrowing Matchers:</a> Matchers that match attributes on AST nodes.</li>
     48 <li><a href="#traversal-matchers">Traversal Matchers:</a> Matchers that allow traversal between AST nodes.</li>
     49 </ul>
     50 </p>
     51 
     52 <p>Within each category the matchers are ordered by node type they match on.
     53 Note that if a matcher can match multiple node types, it will it will appear
     54 multiple times. This means that by searching for Matcher&lt;Stmt&gt; you can
     55 find all matchers that can be used to match on Stmt nodes.</p>
     56 
     57 <p>The exception to that rule are matchers that can match on any node. Those
     58 are marked with a * and are listed in the beginning of each category.</p>
     59 
     60 <p>Note that the categorization of matchers is a great help when you combine
     61 them into matcher expressions. You will usually want to form matcher expressions
     62 that read like english sentences by alternating between node matchers and
     63 narrowing or traversal matchers, like this:
     64 <pre>
     65 recordDecl(hasDescendant(
     66     ifStmt(hasTrueExpression(
     67         expr(hasDescendant(
     68             ifStmt()))))))
     69 </pre>
     70 </p>
     71 
     72 <!-- ======================================================================= -->
     73 <h2 id="decl-matchers">Node Matchers</h2>
     74 <!-- ======================================================================= -->
     75 
     76 <p>Node matchers are at the core of matcher expressions - they specify the type
     77 of node that is expected. Every match expression starts with a node matcher,
     78 which can then be further refined with a narrowing or traversal matcher. All
     79 traversal matchers take node matchers as their arguments.</p>
     80 
     81 <p>For convenience, all node matchers take an arbitrary number of arguments
     82 and implicitly act as allOf matchers.</p>
     83 
     84 <p>Node matchers are the only matchers that support the bind("id") call to
     85 bind the matched node to the given string, to be later retrieved from the
     86 match callback.</p>
     87 
     88 <p>It is important to remember that the arguments to node matchers are
     89 predicates on the same node, just with additional information about the type.
     90 This is often useful to make matcher expression more readable by inlining bind
     91 calls into redundant node matchers inside another node matcher:
     92 <pre>
     93 // This binds the CXXRecordDecl to "id", as the decl() matcher will stay on
     94 // the same node.
     95 recordDecl(decl().bind("id"), hasName("::MyClass"))
     96 </pre>
     97 </p>
     98 
     99 <table>
    100 <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
    101 <!-- START_DECL_MATCHERS -->
    102 
    103 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('ctorInitializer0')"><a name="ctorInitializer0Anchor">ctorInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;...</td></tr>
    104 <tr><td colspan="4" class="doc" id="ctorInitializer0"><pre>Matches constructor initializers.
    105 
    106 Examples matches i(42).
    107   class C {
    108     C() : i(42) {}
    109     int i;
    110   };
    111 </pre></td></tr>
    112 
    113 
    114 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('accessSpecDecl0')"><a name="accessSpecDecl0Anchor">accessSpecDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AccessSpecDecl.html">AccessSpecDecl</a>&gt;...</td></tr>
    115 <tr><td colspan="4" class="doc" id="accessSpecDecl0"><pre>Matches C++ access specifier declarations.
    116 
    117 Given
    118   class C {
    119   public:
    120     int a;
    121   };
    122 accessSpecDecl()
    123   matches 'public:'
    124 </pre></td></tr>
    125 
    126 
    127 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('classTemplateDecl0')"><a name="classTemplateDecl0Anchor">classTemplateDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateDecl.html">ClassTemplateDecl</a>&gt;...</td></tr>
    128 <tr><td colspan="4" class="doc" id="classTemplateDecl0"><pre>Matches C++ class template declarations.
    129 
    130 Example matches Z
    131   template&lt;class T&gt; class Z {};
    132 </pre></td></tr>
    133 
    134 
    135 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('classTemplateSpecializationDecl0')"><a name="classTemplateSpecializationDecl0Anchor">classTemplateSpecializationDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;...</td></tr>
    136 <tr><td colspan="4" class="doc" id="classTemplateSpecializationDecl0"><pre>Matches C++ class template specializations.
    137 
    138 Given
    139   template&lt;typename T&gt; class A {};
    140   template&lt;&gt; class A&lt;double&gt; {};
    141   A&lt;int&gt; a;
    142 classTemplateSpecializationDecl()
    143   matches the specializations A&lt;int&gt; and A&lt;double&gt;
    144 </pre></td></tr>
    145 
    146 
    147 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('constructorDecl0')"><a name="constructorDecl0Anchor">constructorDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;...</td></tr>
    148 <tr><td colspan="4" class="doc" id="constructorDecl0"><pre>Matches C++ constructor declarations.
    149 
    150 Example matches Foo::Foo() and Foo::Foo(int)
    151   class Foo {
    152    public:
    153     Foo();
    154     Foo(int);
    155     int DoSomething();
    156   };
    157 </pre></td></tr>
    158 
    159 
    160 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('decl0')"><a name="decl0Anchor">decl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;...</td></tr>
    161 <tr><td colspan="4" class="doc" id="decl0"><pre>Matches declarations.
    162 
    163 Examples matches X, C, and the friend declaration inside C;
    164   void X();
    165   class C {
    166     friend X;
    167   };
    168 </pre></td></tr>
    169 
    170 
    171 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('declaratorDecl0')"><a name="declaratorDecl0Anchor">declaratorDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>&gt;...</td></tr>
    172 <tr><td colspan="4" class="doc" id="declaratorDecl0"><pre>Matches declarator declarations (field, variable, function
    173 and non-type template parameter declarations).
    174 
    175 Given
    176   class X { int y; };
    177 declaratorDecl()
    178   matches int y.
    179 </pre></td></tr>
    180 
    181 
    182 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('destructorDecl0')"><a name="destructorDecl0Anchor">destructorDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDestructorDecl.html">CXXDestructorDecl</a>&gt;...</td></tr>
    183 <tr><td colspan="4" class="doc" id="destructorDecl0"><pre>Matches explicit C++ destructor declarations.
    184 
    185 Example matches Foo::~Foo()
    186   class Foo {
    187    public:
    188     virtual ~Foo();
    189   };
    190 </pre></td></tr>
    191 
    192 
    193 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('enumConstantDecl0')"><a name="enumConstantDecl0Anchor">enumConstantDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumConstantDecl.html">EnumConstantDecl</a>&gt;...</td></tr>
    194 <tr><td colspan="4" class="doc" id="enumConstantDecl0"><pre>Matches enum constants.
    195 
    196 Example matches A, B, C
    197   enum X {
    198     A, B, C
    199   };
    200 </pre></td></tr>
    201 
    202 
    203 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('enumDecl0')"><a name="enumDecl0Anchor">enumDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumDecl.html">EnumDecl</a>&gt;...</td></tr>
    204 <tr><td colspan="4" class="doc" id="enumDecl0"><pre>Matches enum declarations.
    205 
    206 Example matches X
    207   enum X {
    208     A, B, C
    209   };
    210 </pre></td></tr>
    211 
    212 
    213 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('fieldDecl0')"><a name="fieldDecl0Anchor">fieldDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt;...</td></tr>
    214 <tr><td colspan="4" class="doc" id="fieldDecl0"><pre>Matches field declarations.
    215 
    216 Given
    217   class X { int m; };
    218 fieldDecl()
    219   matches 'm'.
    220 </pre></td></tr>
    221 
    222 
    223 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('friendDecl0')"><a name="friendDecl0Anchor">friendDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FriendDecl.html">FriendDecl</a>&gt;...</td></tr>
    224 <tr><td colspan="4" class="doc" id="friendDecl0"><pre>Matches friend declarations.
    225 
    226 Given
    227   class X { friend void foo(); };
    228 friendDecl()
    229   matches 'friend void foo()'.
    230 </pre></td></tr>
    231 
    232 
    233 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('functionDecl0')"><a name="functionDecl0Anchor">functionDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;...</td></tr>
    234 <tr><td colspan="4" class="doc" id="functionDecl0"><pre>Matches function declarations.
    235 
    236 Example matches f
    237   void f();
    238 </pre></td></tr>
    239 
    240 
    241 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('functionTemplateDecl0')"><a name="functionTemplateDecl0Anchor">functionTemplateDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionTemplateDecl.html">FunctionTemplateDecl</a>&gt;...</td></tr>
    242 <tr><td colspan="4" class="doc" id="functionTemplateDecl0"><pre>Matches C++ function template declarations.
    243 
    244 Example matches f
    245   template&lt;class T&gt; void f(T t) {}
    246 </pre></td></tr>
    247 
    248 
    249 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('methodDecl0')"><a name="methodDecl0Anchor">methodDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;...</td></tr>
    250 <tr><td colspan="4" class="doc" id="methodDecl0"><pre>Matches method declarations.
    251 
    252 Example matches y
    253   class X { void y(); };
    254 </pre></td></tr>
    255 
    256 
    257 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namedDecl0')"><a name="namedDecl0Anchor">namedDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;...</td></tr>
    258 <tr><td colspan="4" class="doc" id="namedDecl0"><pre>Matches a declaration of anything that could have a name.
    259 
    260 Example matches X, S, the anonymous union type, i, and U;
    261   typedef int X;
    262   struct S {
    263     union {
    264       int i;
    265     } U;
    266   };
    267 </pre></td></tr>
    268 
    269 
    270 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namespaceDecl0')"><a name="namespaceDecl0Anchor">namespaceDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt;...</td></tr>
    271 <tr><td colspan="4" class="doc" id="namespaceDecl0"><pre>Matches a declaration of a namespace.
    272 
    273 Given
    274   namespace {}
    275   namespace test {}
    276 namespaceDecl()
    277   matches "namespace {}" and "namespace test {}"
    278 </pre></td></tr>
    279 
    280 
    281 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('parmVarDecl0')"><a name="parmVarDecl0Anchor">parmVarDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt;...</td></tr>
    282 <tr><td colspan="4" class="doc" id="parmVarDecl0"><pre>Matches parameter variable declarations.
    283 
    284 Given
    285   void f(int x);
    286 parmVarDecl()
    287   matches int x.
    288 </pre></td></tr>
    289 
    290 
    291 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('recordDecl0')"><a name="recordDecl0Anchor">recordDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;...</td></tr>
    292 <tr><td colspan="4" class="doc" id="recordDecl0"><pre>Matches C++ class declarations.
    293 
    294 Example matches X, Z
    295   class X;
    296   template&lt;class T&gt; class Z {};
    297 </pre></td></tr>
    298 
    299 
    300 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('unresolvedUsingValueDecl0')"><a name="unresolvedUsingValueDecl0Anchor">unresolvedUsingValueDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingValueDecl.html">UnresolvedUsingValueDecl</a>&gt;...</td></tr>
    301 <tr><td colspan="4" class="doc" id="unresolvedUsingValueDecl0"><pre>Matches unresolved using value declarations.
    302 
    303 Given
    304   template&lt;typename X&gt;
    305   class C : private X {
    306     using X::x;
    307   };
    308 unresolvedUsingValueDecl()
    309   matches using X::x </pre></td></tr>
    310 
    311 
    312 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('usingDecl0')"><a name="usingDecl0Anchor">usingDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDecl.html">UsingDecl</a>&gt;...</td></tr>
    313 <tr><td colspan="4" class="doc" id="usingDecl0"><pre>Matches using declarations.
    314 
    315 Given
    316   namespace X { int x; }
    317   using X::x;
    318 usingDecl()
    319   matches using X::x </pre></td></tr>
    320 
    321 
    322 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('varDecl0')"><a name="varDecl0Anchor">varDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;...</td></tr>
    323 <tr><td colspan="4" class="doc" id="varDecl0"><pre>Matches variable declarations.
    324 
    325 Note: this does not match declarations of member variables, which are
    326 "field" declarations in Clang parlance.
    327 
    328 Example matches a
    329   int a;
    330 </pre></td></tr>
    331 
    332 
    333 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('nestedNameSpecifierLoc0')"><a name="nestedNameSpecifierLoc0Anchor">nestedNameSpecifierLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;...</td></tr>
    334 <tr><td colspan="4" class="doc" id="nestedNameSpecifierLoc0"><pre>Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
    335 </pre></td></tr>
    336 
    337 
    338 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('nestedNameSpecifier0')"><a name="nestedNameSpecifier0Anchor">nestedNameSpecifier</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;...</td></tr>
    339 <tr><td colspan="4" class="doc" id="nestedNameSpecifier0"><pre>Matches nested name specifiers.
    340 
    341 Given
    342   namespace ns {
    343     struct A { static void f(); };
    344     void A::f() {}
    345     void g() { A::f(); }
    346   }
    347   ns::A a;
    348 nestedNameSpecifier()
    349   matches "ns::" and both "A::"
    350 </pre></td></tr>
    351 
    352 
    353 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('qualType0')"><a name="qualType0Anchor">qualType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;...</td></tr>
    354 <tr><td colspan="4" class="doc" id="qualType0"><pre>Matches QualTypes in the clang AST.
    355 </pre></td></tr>
    356 
    357 
    358 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('arraySubscriptExpr0')"><a name="arraySubscriptExpr0Anchor">arraySubscriptExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;...</td></tr>
    359 <tr><td colspan="4" class="doc" id="arraySubscriptExpr0"><pre>Matches array subscript expressions.
    360 
    361 Given
    362   int i = a[1];
    363 arraySubscriptExpr()
    364   matches "a[1]"
    365 </pre></td></tr>
    366 
    367 
    368 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('asmStmt0')"><a name="asmStmt0Anchor">asmStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AsmStmt.html">AsmStmt</a>&gt;...</td></tr>
    369 <tr><td colspan="4" class="doc" id="asmStmt0"><pre>Matches asm statements.
    370 
    371  int i = 100;
    372   __asm("mov al, 2");
    373 asmStmt()
    374   matches '__asm("mov al, 2")'
    375 </pre></td></tr>
    376 
    377 
    378 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('binaryOperator0')"><a name="binaryOperator0Anchor">binaryOperator</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;...</td></tr>
    379 <tr><td colspan="4" class="doc" id="binaryOperator0"><pre>Matches binary operator expressions.
    380 
    381 Example matches a || b
    382   !(a || b)
    383 </pre></td></tr>
    384 
    385 
    386 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('bindTemporaryExpr0')"><a name="bindTemporaryExpr0Anchor">bindTemporaryExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBindTemporaryExpr.html">CXXBindTemporaryExpr</a>&gt;...</td></tr>
    387 <tr><td colspan="4" class="doc" id="bindTemporaryExpr0"><pre>Matches nodes where temporaries are created.
    388 
    389 Example matches FunctionTakesString(GetStringByValue())
    390     (matcher = bindTemporaryExpr())
    391   FunctionTakesString(GetStringByValue());
    392   FunctionTakesStringByPointer(GetStringPointer());
    393 </pre></td></tr>
    394 
    395 
    396 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('boolLiteral0')"><a name="boolLiteral0Anchor">boolLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;...</td></tr>
    397 <tr><td colspan="4" class="doc" id="boolLiteral0"><pre>Matches bool literals.
    398 
    399 Example matches true
    400   true
    401 </pre></td></tr>
    402 
    403 
    404 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('breakStmt0')"><a name="breakStmt0Anchor">breakStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BreakStmt.html">BreakStmt</a>&gt;...</td></tr>
    405 <tr><td colspan="4" class="doc" id="breakStmt0"><pre>Matches break statements.
    406 
    407 Given
    408   while (true) { break; }
    409 breakStmt()
    410   matches 'break'
    411 </pre></td></tr>
    412 
    413 
    414 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cStyleCastExpr0')"><a name="cStyleCastExpr0Anchor">cStyleCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CStyleCastExpr.html">CStyleCastExpr</a>&gt;...</td></tr>
    415 <tr><td colspan="4" class="doc" id="cStyleCastExpr0"><pre>Matches a C-style cast expression.
    416 
    417 Example: Matches (int*) 2.2f in
    418   int i = (int) 2.2f;
    419 </pre></td></tr>
    420 
    421 
    422 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('callExpr0')"><a name="callExpr0Anchor">callExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;...</td></tr>
    423 <tr><td colspan="4" class="doc" id="callExpr0"><pre>Matches call expressions.
    424 
    425 Example matches x.y() and y()
    426   X x;
    427   x.y();
    428   y();
    429 </pre></td></tr>
    430 
    431 
    432 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('caseStmt0')"><a name="caseStmt0Anchor">caseStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CaseStmt.html">CaseStmt</a>&gt;...</td></tr>
    433 <tr><td colspan="4" class="doc" id="caseStmt0"><pre>Matches case statements inside switch statements.
    434 
    435 Given
    436   switch(a) { case 42: break; default: break; }
    437 caseStmt()
    438   matches 'case 42: break;'.
    439 </pre></td></tr>
    440 
    441 
    442 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('castExpr0')"><a name="castExpr0Anchor">castExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;...</td></tr>
    443 <tr><td colspan="4" class="doc" id="castExpr0"><pre>Matches any cast nodes of Clang's AST.
    444 
    445 Example: castExpr() matches each of the following:
    446   (int) 3;
    447   const_cast&lt;Expr *&gt;(SubExpr);
    448   char c = 0;
    449 but does not match
    450   int i = (0);
    451   int k = 0;
    452 </pre></td></tr>
    453 
    454 
    455 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('catchStmt0')"><a name="catchStmt0Anchor">catchStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a>&gt;...</td></tr>
    456 <tr><td colspan="4" class="doc" id="catchStmt0"><pre>Matches catch statements.
    457 
    458   try {} catch(int i) {}
    459 catchStmt()
    460   matches 'catch(int i)'
    461 </pre></td></tr>
    462 
    463 
    464 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('characterLiteral0')"><a name="characterLiteral0Anchor">characterLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;...</td></tr>
    465 <tr><td colspan="4" class="doc" id="characterLiteral0"><pre>Matches character literals (also matches wchar_t).
    466 
    467 Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral),
    468 though.
    469 
    470 Example matches 'a', L'a'
    471   char ch = 'a'; wchar_t chw = L'a';
    472 </pre></td></tr>
    473 
    474 
    475 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('compoundLiteralExpr0')"><a name="compoundLiteralExpr0Anchor">compoundLiteralExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>&gt;...</td></tr>
    476 <tr><td colspan="4" class="doc" id="compoundLiteralExpr0"><pre>Matches compound (i.e. non-scalar) literals
    477 
    478 Example match: {1}, (1, 2)
    479   int array[4] = {1}; vector int myvec = (vector int)(1, 2);
    480 </pre></td></tr>
    481 
    482 
    483 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('compoundStmt0')"><a name="compoundStmt0Anchor">compoundStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;...</td></tr>
    484 <tr><td colspan="4" class="doc" id="compoundStmt0"><pre>Matches compound statements.
    485 
    486 Example matches '{}' and '{{}}'in 'for (;;) {{}}'
    487   for (;;) {{}}
    488 </pre></td></tr>
    489 
    490 
    491 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('conditionalOperator0')"><a name="conditionalOperator0Anchor">conditionalOperator</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;...</td></tr>
    492 <tr><td colspan="4" class="doc" id="conditionalOperator0"><pre>Matches conditional operator expressions.
    493 
    494 Example matches a ? b : c
    495   (a ? b : c) + 42
    496 </pre></td></tr>
    497 
    498 
    499 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('constCastExpr0')"><a name="constCastExpr0Anchor">constCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstCastExpr.html">CXXConstCastExpr</a>&gt;...</td></tr>
    500 <tr><td colspan="4" class="doc" id="constCastExpr0"><pre>Matches a const_cast expression.
    501 
    502 Example: Matches const_cast&lt;int*&gt;(&amp;r) in
    503   int n = 42;
    504   const int &amp;r(n);
    505   int* p = const_cast&lt;int*&gt;(&amp;r);
    506 </pre></td></tr>
    507 
    508 
    509 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('constructExpr0')"><a name="constructExpr0Anchor">constructExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;...</td></tr>
    510 <tr><td colspan="4" class="doc" id="constructExpr0"><pre>Matches constructor call expressions (including implicit ones).
    511 
    512 Example matches string(ptr, n) and ptr within arguments of f
    513     (matcher = constructExpr())
    514   void f(const string &amp;a, const string &amp;b);
    515   char *ptr;
    516   int n;
    517   f(string(ptr, n), ptr);
    518 </pre></td></tr>
    519 
    520 
    521 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('continueStmt0')"><a name="continueStmt0Anchor">continueStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ContinueStmt.html">ContinueStmt</a>&gt;...</td></tr>
    522 <tr><td colspan="4" class="doc" id="continueStmt0"><pre>Matches continue statements.
    523 
    524 Given
    525   while (true) { continue; }
    526 continueStmt()
    527   matches 'continue'
    528 </pre></td></tr>
    529 
    530 
    531 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('declRefExpr0')"><a name="declRefExpr0Anchor">declRefExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;...</td></tr>
    532 <tr><td colspan="4" class="doc" id="declRefExpr0"><pre>Matches expressions that refer to declarations.
    533 
    534 Example matches x in if (x)
    535   bool x;
    536   if (x) {}
    537 </pre></td></tr>
    538 
    539 
    540 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('declStmt0')"><a name="declStmt0Anchor">declStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;...</td></tr>
    541 <tr><td colspan="4" class="doc" id="declStmt0"><pre>Matches declaration statements.
    542 
    543 Given
    544   int a;
    545 declStmt()
    546   matches 'int a'.
    547 </pre></td></tr>
    548 
    549 
    550 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('defaultArgExpr0')"><a name="defaultArgExpr0Anchor">defaultArgExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDefaultArgExpr.html">CXXDefaultArgExpr</a>&gt;...</td></tr>
    551 <tr><td colspan="4" class="doc" id="defaultArgExpr0"><pre>Matches the value of a default argument at the call site.
    552 
    553 Example matches the CXXDefaultArgExpr placeholder inserted for the
    554     default value of the second parameter in the call expression f(42)
    555     (matcher = defaultArgExpr())
    556   void f(int x, int y = 0);
    557   f(42);
    558 </pre></td></tr>
    559 
    560 
    561 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('defaultStmt0')"><a name="defaultStmt0Anchor">defaultStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DefaultStmt.html">DefaultStmt</a>&gt;...</td></tr>
    562 <tr><td colspan="4" class="doc" id="defaultStmt0"><pre>Matches default statements inside switch statements.
    563 
    564 Given
    565   switch(a) { case 42: break; default: break; }
    566 defaultStmt()
    567   matches 'default: break;'.
    568 </pre></td></tr>
    569 
    570 
    571 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('deleteExpr0')"><a name="deleteExpr0Anchor">deleteExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDeleteExpr.html">CXXDeleteExpr</a>&gt;...</td></tr>
    572 <tr><td colspan="4" class="doc" id="deleteExpr0"><pre>Matches delete expressions.
    573 
    574 Given
    575   delete X;
    576 deleteExpr()
    577   matches 'delete X'.
    578 </pre></td></tr>
    579 
    580 
    581 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('doStmt0')"><a name="doStmt0Anchor">doStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;...</td></tr>
    582 <tr><td colspan="4" class="doc" id="doStmt0"><pre>Matches do statements.
    583 
    584 Given
    585   do {} while (true);
    586 doStmt()
    587   matches 'do {} while(true)'
    588 </pre></td></tr>
    589 
    590 
    591 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('dynamicCastExpr0')"><a name="dynamicCastExpr0Anchor">dynamicCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDynamicCastExpr.html">CXXDynamicCastExpr</a>&gt;...</td></tr>
    592 <tr><td colspan="4" class="doc" id="dynamicCastExpr0"><pre>Matches a dynamic_cast expression.
    593 
    594 Example:
    595   dynamicCastExpr()
    596 matches
    597   dynamic_cast&lt;D*&gt;(&amp;b);
    598 in
    599   struct B { virtual ~B() {} }; struct D : B {};
    600   B b;
    601   D* p = dynamic_cast&lt;D*&gt;(&amp;b);
    602 </pre></td></tr>
    603 
    604 
    605 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('explicitCastExpr0')"><a name="explicitCastExpr0Anchor">explicitCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>&gt;...</td></tr>
    606 <tr><td colspan="4" class="doc" id="explicitCastExpr0"><pre>Matches explicit cast expressions.
    607 
    608 Matches any cast expression written in user code, whether it be a
    609 C-style cast, a functional-style cast, or a keyword cast.
    610 
    611 Does not match implicit conversions.
    612 
    613 Note: the name "explicitCast" is chosen to match Clang's terminology, as
    614 Clang uses the term "cast" to apply to implicit conversions as well as to
    615 actual cast expressions.
    616 
    617 hasDestinationType.
    618 
    619 Example: matches all five of the casts in
    620   int((int)(reinterpret_cast&lt;int&gt;(static_cast&lt;int&gt;(const_cast&lt;int&gt;(42)))))
    621 but does not match the implicit conversion in
    622   long ell = 42;
    623 </pre></td></tr>
    624 
    625 
    626 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('expr0')"><a name="expr0Anchor">expr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;...</td></tr>
    627 <tr><td colspan="4" class="doc" id="expr0"><pre>Matches expressions.
    628 
    629 Example matches x()
    630   void f() { x(); }
    631 </pre></td></tr>
    632 
    633 
    634 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('exprWithCleanups0')"><a name="exprWithCleanups0Anchor">exprWithCleanups</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ExprWithCleanups.html">ExprWithCleanups</a>&gt;...</td></tr>
    635 <tr><td colspan="4" class="doc" id="exprWithCleanups0"><pre>Matches expressions that introduce cleanups to be run at the end
    636 of the sub-expression's evaluation.
    637 
    638 Example matches std::string()
    639   const std::string str = std::string();
    640 </pre></td></tr>
    641 
    642 
    643 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('floatLiteral0')"><a name="floatLiteral0Anchor">floatLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;...</td></tr>
    644 <tr><td colspan="4" class="doc" id="floatLiteral0"><pre>Matches float literals of all sizes encodings, e.g.
    645 1.0, 1.0f, 1.0L and 1e10.
    646 
    647 Does not match implicit conversions such as
    648   float a = 10;
    649 </pre></td></tr>
    650 
    651 
    652 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('forRangeStmt0')"><a name="forRangeStmt0Anchor">forRangeStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;...</td></tr>
    653 <tr><td colspan="4" class="doc" id="forRangeStmt0"><pre>Matches range-based for statements.
    654 
    655 forRangeStmt() matches 'for (auto a : i)'
    656   int i[] =  {1, 2, 3}; for (auto a : i);
    657   for(int j = 0; j &lt; 5; ++j);
    658 </pre></td></tr>
    659 
    660 
    661 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('forStmt0')"><a name="forStmt0Anchor">forStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;...</td></tr>
    662 <tr><td colspan="4" class="doc" id="forStmt0"><pre>Matches for statements.
    663 
    664 Example matches 'for (;;) {}'
    665   for (;;) {}
    666   int i[] =  {1, 2, 3}; for (auto a : i);
    667 </pre></td></tr>
    668 
    669 
    670 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('functionalCastExpr0')"><a name="functionalCastExpr0Anchor">functionalCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>&gt;...</td></tr>
    671 <tr><td colspan="4" class="doc" id="functionalCastExpr0"><pre>Matches functional cast expressions
    672 
    673 Example: Matches Foo(bar);
    674   Foo f = bar;
    675   Foo g = (Foo) bar;
    676   Foo h = Foo(bar);
    677 </pre></td></tr>
    678 
    679 
    680 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('gotoStmt0')"><a name="gotoStmt0Anchor">gotoStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1GotoStmt.html">GotoStmt</a>&gt;...</td></tr>
    681 <tr><td colspan="4" class="doc" id="gotoStmt0"><pre>Matches goto statements.
    682 
    683 Given
    684   goto FOO;
    685   FOO: bar();
    686 gotoStmt()
    687   matches 'goto FOO'
    688 </pre></td></tr>
    689 
    690 
    691 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('ifStmt0')"><a name="ifStmt0Anchor">ifStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;...</td></tr>
    692 <tr><td colspan="4" class="doc" id="ifStmt0"><pre>Matches if statements.
    693 
    694 Example matches 'if (x) {}'
    695   if (x) {}
    696 </pre></td></tr>
    697 
    698 
    699 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('implicitCastExpr0')"><a name="implicitCastExpr0Anchor">implicitCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a>&gt;...</td></tr>
    700 <tr><td colspan="4" class="doc" id="implicitCastExpr0"><pre>Matches the implicit cast nodes of Clang's AST.
    701 
    702 This matches many different places, including function call return value
    703 eliding, as well as any type conversions.
    704 </pre></td></tr>
    705 
    706 
    707 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('initListExpr0')"><a name="initListExpr0Anchor">initListExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InitListExpr.html">InitListExpr</a>&gt;...</td></tr>
    708 <tr><td colspan="4" class="doc" id="initListExpr0"><pre>Matches init list expressions.
    709 
    710 Given
    711   int a[] = { 1, 2 };
    712   struct B { int x, y; };
    713   B b = { 5, 6 };
    714 initList()
    715   matches "{ 1, 2 }" and "{ 5, 6 }"
    716 </pre></td></tr>
    717 
    718 
    719 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('integerLiteral0')"><a name="integerLiteral0Anchor">integerLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;...</td></tr>
    720 <tr><td colspan="4" class="doc" id="integerLiteral0"><pre>Matches integer literals of all sizes encodings, e.g.
    721 1, 1L, 0x1 and 1U.
    722 
    723 Does not match character-encoded integers such as L'a'.
    724 </pre></td></tr>
    725 
    726 
    727 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('labelStmt0')"><a name="labelStmt0Anchor">labelStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;...</td></tr>
    728 <tr><td colspan="4" class="doc" id="labelStmt0"><pre>Matches label statements.
    729 
    730 Given
    731   goto FOO;
    732   FOO: bar();
    733 labelStmt()
    734   matches 'FOO:'
    735 </pre></td></tr>
    736 
    737 
    738 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('lambdaExpr0')"><a name="lambdaExpr0Anchor">lambdaExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LambdaExpr.html">LambdaExpr</a>&gt;...</td></tr>
    739 <tr><td colspan="4" class="doc" id="lambdaExpr0"><pre>Matches lambda expressions.
    740 
    741 Example matches [&amp;](){return 5;}
    742   [&amp;](){return 5;}
    743 </pre></td></tr>
    744 
    745 
    746 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('materializeTemporaryExpr0')"><a name="materializeTemporaryExpr0Anchor">materializeTemporaryExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MaterializeTemporaryExpr.html">MaterializeTemporaryExpr</a>&gt;...</td></tr>
    747 <tr><td colspan="4" class="doc" id="materializeTemporaryExpr0"><pre>Matches nodes where temporaries are materialized.
    748 
    749 Example: Given
    750   struct T {void func()};
    751   T f();
    752   void g(T);
    753 materializeTemporaryExpr() matches 'f()' in these statements
    754   T u(f());
    755   g(f());
    756 but does not match
    757   f();
    758   f().func();
    759 </pre></td></tr>
    760 
    761 
    762 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('memberCallExpr0')"><a name="memberCallExpr0Anchor">memberCallExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;...</td></tr>
    763 <tr><td colspan="4" class="doc" id="memberCallExpr0"><pre>Matches member call expressions.
    764 
    765 Example matches x.y()
    766   X x;
    767   x.y();
    768 </pre></td></tr>
    769 
    770 
    771 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('memberExpr0')"><a name="memberExpr0Anchor">memberExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;...</td></tr>
    772 <tr><td colspan="4" class="doc" id="memberExpr0"><pre>Matches member expressions.
    773 
    774 Given
    775   class Y {
    776     void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
    777     int a; static int b;
    778   };
    779 memberExpr()
    780   matches this-&gt;x, x, y.x, a, this-&gt;b
    781 </pre></td></tr>
    782 
    783 
    784 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('newExpr0')"><a name="newExpr0Anchor">newExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;...</td></tr>
    785 <tr><td colspan="4" class="doc" id="newExpr0"><pre>Matches new expressions.
    786 
    787 Given
    788   new X;
    789 newExpr()
    790   matches 'new X'.
    791 </pre></td></tr>
    792 
    793 
    794 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('nullPtrLiteralExpr0')"><a name="nullPtrLiteralExpr0Anchor">nullPtrLiteralExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNullPtrLiteralExpr.html">CXXNullPtrLiteralExpr</a>&gt;...</td></tr>
    795 <tr><td colspan="4" class="doc" id="nullPtrLiteralExpr0"><pre>Matches nullptr literal.
    796 </pre></td></tr>
    797 
    798 
    799 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('nullStmt0')"><a name="nullStmt0Anchor">nullStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NullStmt.html">NullStmt</a>&gt;...</td></tr>
    800 <tr><td colspan="4" class="doc" id="nullStmt0"><pre>Matches null statements.
    801 
    802   foo();;
    803 nullStmt()
    804   matches the second ';'
    805 </pre></td></tr>
    806 
    807 
    808 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('operatorCallExpr0')"><a name="operatorCallExpr0Anchor">operatorCallExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;...</td></tr>
    809 <tr><td colspan="4" class="doc" id="operatorCallExpr0"><pre>Matches overloaded operator calls.
    810 
    811 Note that if an operator isn't overloaded, it won't match. Instead, use
    812 binaryOperator matcher.
    813 Currently it does not match operators such as new delete.
    814 FIXME: figure out why these do not match?
    815 
    816 Example matches both operator&lt;&lt;((o &lt;&lt; b), c) and operator&lt;&lt;(o, b)
    817     (matcher = operatorCallExpr())
    818   ostream &amp;operator&lt;&lt; (ostream &amp;out, int i) { };
    819   ostream &amp;o; int b = 1, c = 1;
    820   o &lt;&lt; b &lt;&lt; c;
    821 </pre></td></tr>
    822 
    823 
    824 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('reinterpretCastExpr0')"><a name="reinterpretCastExpr0Anchor">reinterpretCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXReinterpretCastExpr.html">CXXReinterpretCastExpr</a>&gt;...</td></tr>
    825 <tr><td colspan="4" class="doc" id="reinterpretCastExpr0"><pre>Matches a reinterpret_cast expression.
    826 
    827 Either the source expression or the destination type can be matched
    828 using has(), but hasDestinationType() is more specific and can be
    829 more readable.
    830 
    831 Example matches reinterpret_cast&lt;char*&gt;(&amp;p) in
    832   void* p = reinterpret_cast&lt;char*&gt;(&amp;p);
    833 </pre></td></tr>
    834 
    835 
    836 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('returnStmt0')"><a name="returnStmt0Anchor">returnStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReturnStmt.html">ReturnStmt</a>&gt;...</td></tr>
    837 <tr><td colspan="4" class="doc" id="returnStmt0"><pre>Matches return statements.
    838 
    839 Given
    840   return 1;
    841 returnStmt()
    842   matches 'return 1'
    843 </pre></td></tr>
    844 
    845 
    846 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('staticCastExpr0')"><a name="staticCastExpr0Anchor">staticCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXStaticCastExpr.html">CXXStaticCastExpr</a>&gt;...</td></tr>
    847 <tr><td colspan="4" class="doc" id="staticCastExpr0"><pre>Matches a C++ static_cast expression.
    848 
    849 hasDestinationType
    850 reinterpretCast
    851 
    852 Example:
    853   staticCastExpr()
    854 matches
    855   static_cast&lt;long&gt;(8)
    856 in
    857   long eight(static_cast&lt;long&gt;(8));
    858 </pre></td></tr>
    859 
    860 
    861 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stmt0')"><a name="stmt0Anchor">stmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;...</td></tr>
    862 <tr><td colspan="4" class="doc" id="stmt0"><pre>Matches statements.
    863 
    864 Given
    865   { ++a; }
    866 stmt()
    867   matches both the compound statement '{ ++a; }' and '++a'.
    868 </pre></td></tr>
    869 
    870 
    871 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stringLiteral0')"><a name="stringLiteral0Anchor">stringLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1StringLiteral.html">StringLiteral</a>&gt;...</td></tr>
    872 <tr><td colspan="4" class="doc" id="stringLiteral0"><pre>Matches string literals (also matches wide string literals).
    873 
    874 Example matches "abcd", L"abcd"
    875   char *s = "abcd"; wchar_t *ws = L"abcd"
    876 </pre></td></tr>
    877 
    878 
    879 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('switchCase0')"><a name="switchCase0Anchor">switchCase</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchCase.html">SwitchCase</a>&gt;...</td></tr>
    880 <tr><td colspan="4" class="doc" id="switchCase0"><pre>Matches case and default statements inside switch statements.
    881 
    882 Given
    883   switch(a) { case 42: break; default: break; }
    884 switchCase()
    885   matches 'case 42: break;' and 'default: break;'.
    886 </pre></td></tr>
    887 
    888 
    889 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('switchStmt0')"><a name="switchStmt0Anchor">switchStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;...</td></tr>
    890 <tr><td colspan="4" class="doc" id="switchStmt0"><pre>Matches switch statements.
    891 
    892 Given
    893   switch(a) { case 42: break; default: break; }
    894 switchStmt()
    895   matches 'switch(a)'.
    896 </pre></td></tr>
    897 
    898 
    899 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('temporaryObjectExpr0')"><a name="temporaryObjectExpr0Anchor">temporaryObjectExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>&gt;...</td></tr>
    900 <tr><td colspan="4" class="doc" id="temporaryObjectExpr0"><pre>Matches functional cast expressions having N != 1 arguments
    901 
    902 Example: Matches Foo(bar, bar)
    903   Foo h = Foo(bar, bar);
    904 </pre></td></tr>
    905 
    906 
    907 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('thisExpr0')"><a name="thisExpr0Anchor">thisExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXThisExpr.html">CXXThisExpr</a>&gt;...</td></tr>
    908 <tr><td colspan="4" class="doc" id="thisExpr0"><pre>Matches implicit and explicit this expressions.
    909 
    910 Example matches the implicit this expression in "return i".
    911     (matcher = thisExpr())
    912 struct foo {
    913   int i;
    914   int f() { return i; }
    915 };
    916 </pre></td></tr>
    917 
    918 
    919 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('throwExpr0')"><a name="throwExpr0Anchor">throwExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXThrowExpr.html">CXXThrowExpr</a>&gt;...</td></tr>
    920 <tr><td colspan="4" class="doc" id="throwExpr0"><pre>Matches throw expressions.
    921 
    922   try { throw 5; } catch(int i) {}
    923 throwExpr()
    924   matches 'throw 5'
    925 </pre></td></tr>
    926 
    927 
    928 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('tryStmt0')"><a name="tryStmt0Anchor">tryStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXTryStmt.html">CXXTryStmt</a>&gt;...</td></tr>
    929 <tr><td colspan="4" class="doc" id="tryStmt0"><pre>Matches try statements.
    930 
    931   try {} catch(int i) {}
    932 tryStmt()
    933   matches 'try {}'
    934 </pre></td></tr>
    935 
    936 
    937 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unaryExprOrTypeTraitExpr0')"><a name="unaryExprOrTypeTraitExpr0Anchor">unaryExprOrTypeTraitExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;...</td></tr>
    938 <tr><td colspan="4" class="doc" id="unaryExprOrTypeTraitExpr0"><pre>Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
    939 
    940 Given
    941   Foo x = bar;
    942   int y = sizeof(x) + alignof(x);
    943 unaryExprOrTypeTraitExpr()
    944   matches sizeof(x) and alignof(x)
    945 </pre></td></tr>
    946 
    947 
    948 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unaryOperator0')"><a name="unaryOperator0Anchor">unaryOperator</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;...</td></tr>
    949 <tr><td colspan="4" class="doc" id="unaryOperator0"><pre>Matches unary operator expressions.
    950 
    951 Example matches !a
    952   !a || b
    953 </pre></td></tr>
    954 
    955 
    956 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unresolvedConstructExpr0')"><a name="unresolvedConstructExpr0Anchor">unresolvedConstructExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>&gt;...</td></tr>
    957 <tr><td colspan="4" class="doc" id="unresolvedConstructExpr0"><pre>Matches unresolved constructor call expressions.
    958 
    959 Example matches T(t) in return statement of f
    960     (matcher = unresolvedConstructExpr())
    961   template &lt;typename T&gt;
    962   void f(const T&amp; t) { return T(t); }
    963 </pre></td></tr>
    964 
    965 
    966 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('userDefinedLiteral0')"><a name="userDefinedLiteral0Anchor">userDefinedLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UserDefinedLiteral.html">UserDefinedLiteral</a>&gt;...</td></tr>
    967 <tr><td colspan="4" class="doc" id="userDefinedLiteral0"><pre>Matches user defined literal operator call.
    968 
    969 Example match: "foo"_suffix
    970 </pre></td></tr>
    971 
    972 
    973 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('whileStmt0')"><a name="whileStmt0Anchor">whileStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;...</td></tr>
    974 <tr><td colspan="4" class="doc" id="whileStmt0"><pre>Matches while statements.
    975 
    976 Given
    977   while (true) {}
    978 whileStmt()
    979   matches 'while (true) {}'.
    980 </pre></td></tr>
    981 
    982 
    983 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('typeLoc0')"><a name="typeLoc0Anchor">typeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;...</td></tr>
    984 <tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
    985 </pre></td></tr>
    986 
    987 
    988 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('arrayType0')"><a name="arrayType0Anchor">arrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;...</td></tr>
    989 <tr><td colspan="4" class="doc" id="arrayType0"><pre>Matches all kinds of arrays.
    990 
    991 Given
    992   int a[] = { 2, 3 };
    993   int b[4];
    994   void f() { int c[a[0]]; }
    995 arrayType()
    996   matches "int a[]", "int b[4]" and "int c[a[0]]";
    997 </pre></td></tr>
    998 
    999 
   1000 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('atomicType0')"><a name="atomicType0Anchor">atomicType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;...</td></tr>
   1001 <tr><td colspan="4" class="doc" id="atomicType0"><pre>Matches atomic types.
   1002 
   1003 Given
   1004   _Atomic(int) i;
   1005 atomicType()
   1006   matches "_Atomic(int) i"
   1007 </pre></td></tr>
   1008 
   1009 
   1010 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('autoType0')"><a name="autoType0Anchor">autoType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;...</td></tr>
   1011 <tr><td colspan="4" class="doc" id="autoType0"><pre>Matches types nodes representing C++11 auto types.
   1012 
   1013 Given:
   1014   auto n = 4;
   1015   int v[] = { 2, 3 }
   1016   for (auto i : v) { }
   1017 autoType()
   1018   matches "auto n" and "auto i"
   1019 </pre></td></tr>
   1020 
   1021 
   1022 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('blockPointerType0')"><a name="blockPointerType0Anchor">blockPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;...</td></tr>
   1023 <tr><td colspan="4" class="doc" id="blockPointerType0"><pre>Matches block pointer types, i.e. types syntactically represented as
   1024 "void (^)(int)".
   1025 
   1026 The pointee is always required to be a FunctionType.
   1027 </pre></td></tr>
   1028 
   1029 
   1030 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('builtinType0')"><a name="builtinType0Anchor">builtinType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BuiltinType.html">BuiltinType</a>&gt;...</td></tr>
   1031 <tr><td colspan="4" class="doc" id="builtinType0"><pre>Matches builtin Types.
   1032 
   1033 Given
   1034   struct A {};
   1035   A a;
   1036   int b;
   1037   float c;
   1038   bool d;
   1039 builtinType()
   1040   matches "int b", "float c" and "bool d"
   1041 </pre></td></tr>
   1042 
   1043 
   1044 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('complexType0')"><a name="complexType0Anchor">complexType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;...</td></tr>
   1045 <tr><td colspan="4" class="doc" id="complexType0"><pre>Matches C99 complex types.
   1046 
   1047 Given
   1048   _Complex float f;
   1049 complexType()
   1050   matches "_Complex float f"
   1051 </pre></td></tr>
   1052 
   1053 
   1054 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('constantArrayType0')"><a name="constantArrayType0Anchor">constantArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConstantArrayType.html">ConstantArrayType</a>&gt;...</td></tr>
   1055 <tr><td colspan="4" class="doc" id="constantArrayType0"><pre>Matches C arrays with a specified constant size.
   1056 
   1057 Given
   1058   void() {
   1059     int a[2];
   1060     int b[] = { 2, 3 };
   1061     int c[b[0]];
   1062   }
   1063 constantArrayType()
   1064   matches "int a[2]"
   1065 </pre></td></tr>
   1066 
   1067 
   1068 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('dependentSizedArrayType0')"><a name="dependentSizedArrayType0Anchor">dependentSizedArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DependentSizedArrayType.html">DependentSizedArrayType</a>&gt;...</td></tr>
   1069 <tr><td colspan="4" class="doc" id="dependentSizedArrayType0"><pre>Matches C++ arrays whose size is a value-dependent expression.
   1070 
   1071 Given
   1072   template&lt;typename T, int Size&gt;
   1073   class array {
   1074     T data[Size];
   1075   };
   1076 dependentSizedArrayType
   1077   matches "T data[Size]"
   1078 </pre></td></tr>
   1079 
   1080 
   1081 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('elaboratedType0')"><a name="elaboratedType0Anchor">elaboratedType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;...</td></tr>
   1082 <tr><td colspan="4" class="doc" id="elaboratedType0"><pre>Matches types specified with an elaborated type keyword or with a
   1083 qualified name.
   1084 
   1085 Given
   1086   namespace N {
   1087     namespace M {
   1088       class D {};
   1089     }
   1090   }
   1091   class C {};
   1092 
   1093   class C c;
   1094   N::M::D d;
   1095 
   1096 elaboratedType() matches the type of the variable declarations of both
   1097 c and d.
   1098 </pre></td></tr>
   1099 
   1100 
   1101 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('functionType0')"><a name="functionType0Anchor">functionType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionType.html">FunctionType</a>&gt;...</td></tr>
   1102 <tr><td colspan="4" class="doc" id="functionType0"><pre>Matches FunctionType nodes.
   1103 
   1104 Given
   1105   int (*f)(int);
   1106   void g();
   1107 functionType()
   1108   matches "int (*f)(int)" and the type of "g".
   1109 </pre></td></tr>
   1110 
   1111 
   1112 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('incompleteArrayType0')"><a name="incompleteArrayType0Anchor">incompleteArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IncompleteArrayType.html">IncompleteArrayType</a>&gt;...</td></tr>
   1113 <tr><td colspan="4" class="doc" id="incompleteArrayType0"><pre>Matches C arrays with unspecified size.
   1114 
   1115 Given
   1116   int a[] = { 2, 3 };
   1117   int b[42];
   1118   void f(int c[]) { int d[a[0]]; };
   1119 incompleteArrayType()
   1120   matches "int a[]" and "int c[]"
   1121 </pre></td></tr>
   1122 
   1123 
   1124 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('lValueReferenceType0')"><a name="lValueReferenceType0Anchor">lValueReferenceType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LValueReferenceType.html">LValueReferenceType</a>&gt;...</td></tr>
   1125 <tr><td colspan="4" class="doc" id="lValueReferenceType0"><pre>Matches lvalue reference types.
   1126 
   1127 Given:
   1128   int *a;
   1129   int &amp;b = *a;
   1130   int &amp;&amp;c = 1;
   1131   auto &amp;d = b;
   1132   auto &amp;&amp;e = c;
   1133   auto &amp;&amp;f = 2;
   1134   int g = 5;
   1135 
   1136 lValueReferenceType() matches the types of b, d, and e. e is
   1137 matched since the type is deduced as int&amp; by reference collapsing rules.
   1138 </pre></td></tr>
   1139 
   1140 
   1141 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('memberPointerType0')"><a name="memberPointerType0Anchor">memberPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;...</td></tr>
   1142 <tr><td colspan="4" class="doc" id="memberPointerType0"><pre>Matches member pointer types.
   1143 Given
   1144   struct A { int i; }
   1145   A::* ptr = A::i;
   1146 memberPointerType()
   1147   matches "A::* ptr"
   1148 </pre></td></tr>
   1149 
   1150 
   1151 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('parenType0')"><a name="parenType0Anchor">parenType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;...</td></tr>
   1152 <tr><td colspan="4" class="doc" id="parenType0"><pre>Matches ParenType nodes.
   1153 
   1154 Given
   1155   int (*ptr_to_array)[4];
   1156   int *array_of_ptrs[4];
   1157 
   1158 varDecl(hasType(pointsTo(parenType()))) matches ptr_to_array but not
   1159 array_of_ptrs.
   1160 </pre></td></tr>
   1161 
   1162 
   1163 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('pointerType0')"><a name="pointerType0Anchor">pointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;...</td></tr>
   1164 <tr><td colspan="4" class="doc" id="pointerType0"><pre>Matches pointer types.
   1165 
   1166 Given
   1167   int *a;
   1168   int &amp;b = *a;
   1169   int c = 5;
   1170 pointerType()
   1171   matches "int *a"
   1172 </pre></td></tr>
   1173 
   1174 
   1175 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('rValueReferenceType0')"><a name="rValueReferenceType0Anchor">rValueReferenceType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RValueReferenceType.html">RValueReferenceType</a>&gt;...</td></tr>
   1176 <tr><td colspan="4" class="doc" id="rValueReferenceType0"><pre>Matches rvalue reference types.
   1177 
   1178 Given:
   1179   int *a;
   1180   int &amp;b = *a;
   1181   int &amp;&amp;c = 1;
   1182   auto &amp;d = b;
   1183   auto &amp;&amp;e = c;
   1184   auto &amp;&amp;f = 2;
   1185   int g = 5;
   1186 
   1187 rValueReferenceType() matches the types of c and f. e is not
   1188 matched as it is deduced to int&amp; by reference collapsing rules.
   1189 </pre></td></tr>
   1190 
   1191 
   1192 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('recordType0')"><a name="recordType0Anchor">recordType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;...</td></tr>
   1193 <tr><td colspan="4" class="doc" id="recordType0"><pre>Matches record types (e.g. structs, classes).
   1194 
   1195 Given
   1196   class C {};
   1197   struct S {};
   1198 
   1199   C c;
   1200   S s;
   1201 
   1202 recordType() matches the type of the variable declarations of both c
   1203 and s.
   1204 </pre></td></tr>
   1205 
   1206 
   1207 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('referenceType0')"><a name="referenceType0Anchor">referenceType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;...</td></tr>
   1208 <tr><td colspan="4" class="doc" id="referenceType0"><pre>Matches both lvalue and rvalue reference types.
   1209 
   1210 Given
   1211   int *a;
   1212   int &amp;b = *a;
   1213   int &amp;&amp;c = 1;
   1214   auto &amp;d = b;
   1215   auto &amp;&amp;e = c;
   1216   auto &amp;&amp;f = 2;
   1217   int g = 5;
   1218 
   1219 referenceType() matches the types of b, c, d, e, and f.
   1220 </pre></td></tr>
   1221 
   1222 
   1223 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('templateSpecializationType0')"><a name="templateSpecializationType0Anchor">templateSpecializationType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;...</td></tr>
   1224 <tr><td colspan="4" class="doc" id="templateSpecializationType0"><pre>Matches template specialization types.
   1225 
   1226 Given
   1227   template &lt;typename T&gt;
   1228   class C { };
   1229 
   1230   template class C&lt;int&gt;;  A
   1231   C&lt;char&gt; var;            B
   1232 
   1233 templateSpecializationType() matches the type of the explicit
   1234 instantiation in A and the type of the variable declaration in B.
   1235 </pre></td></tr>
   1236 
   1237 
   1238 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('type0')"><a name="type0Anchor">type</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;...</td></tr>
   1239 <tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
   1240 </pre></td></tr>
   1241 
   1242 
   1243 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('typedefType0')"><a name="typedefType0Anchor">typedefType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;...</td></tr>
   1244 <tr><td colspan="4" class="doc" id="typedefType0"><pre>Matches typedef types.
   1245 
   1246 Given
   1247   typedef int X;
   1248 typedefType()
   1249   matches "typedef int X"
   1250 </pre></td></tr>
   1251 
   1252 
   1253 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('unaryTransformType0')"><a name="unaryTransformType0Anchor">unaryTransformType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryTransformType.html">UnaryTransformType</a>&gt;...</td></tr>
   1254 <tr><td colspan="4" class="doc" id="unaryTransformType0"><pre>Matches types nodes representing unary type transformations.
   1255 
   1256 Given:
   1257   typedef __underlying_type(T) type;
   1258 unaryTransformType()
   1259   matches "__underlying_type(T)"
   1260 </pre></td></tr>
   1261 
   1262 
   1263 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('variableArrayType0')"><a name="variableArrayType0Anchor">variableArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VariableArrayType.html">VariableArrayType</a>&gt;...</td></tr>
   1264 <tr><td colspan="4" class="doc" id="variableArrayType0"><pre>Matches C arrays with a specified size that is not an
   1265 integer-constant-expression.
   1266 
   1267 Given
   1268   void f() {
   1269     int a[] = { 2, 3 }
   1270     int b[42];
   1271     int c[a[0]];
   1272 variableArrayType()
   1273   matches "int c[a[0]]"
   1274 </pre></td></tr>
   1275 
   1276 <!--END_DECL_MATCHERS -->
   1277 </table>
   1278 
   1279 <!-- ======================================================================= -->
   1280 <h2 id="narrowing-matchers">Narrowing Matchers</h2>
   1281 <!-- ======================================================================= -->
   1282 
   1283 <p>Narrowing matchers match certain attributes on the current node, thus
   1284 narrowing down the set of nodes of the current type to match on.</p>
   1285 
   1286 <p>There are special logical narrowing matchers (allOf, anyOf, anything and unless)
   1287 which allow users to create more powerful match expressions.</p>
   1288 
   1289 <table>
   1290 <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
   1291 <!-- START_NARROWING_MATCHERS -->
   1292 
   1293 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('allOf0')"><a name="allOf0Anchor">allOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
   1294 <tr><td colspan="4" class="doc" id="allOf0"><pre>Matches if all given matchers match.
   1295 
   1296 Usable as: Any Matcher
   1297 </pre></td></tr>
   1298 
   1299 
   1300 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anyOf0')"><a name="anyOf0Anchor">anyOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
   1301 <tr><td colspan="4" class="doc" id="anyOf0"><pre>Matches if any of the given matchers matches.
   1302 
   1303 Usable as: Any Matcher
   1304 </pre></td></tr>
   1305 
   1306 
   1307 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anything0')"><a name="anything0Anchor">anything</a></td><td></td></tr>
   1308 <tr><td colspan="4" class="doc" id="anything0"><pre>Matches any node.
   1309 
   1310 Useful when another matcher requires a child matcher, but there's no
   1311 additional constraint. This will often be used with an explicit conversion
   1312 to an internal::Matcher&lt;&gt; type such as TypeMatcher.
   1313 
   1314 Example: DeclarationMatcher(anything()) matches all declarations, e.g.,
   1315 "int* p" and "void f()" in
   1316   int* p;
   1317   void f();
   1318 
   1319 Usable as: Any Matcher
   1320 </pre></td></tr>
   1321 
   1322 
   1323 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher&lt;*&gt;</td></tr>
   1324 <tr><td colspan="4" class="doc" id="unless0"><pre>Matches if the provided matcher does not match.
   1325 
   1326 Example matches Y (matcher = recordDecl(unless(hasName("X"))))
   1327   class X {};
   1328   class Y {};
   1329 
   1330 Usable as: Any Matcher
   1331 </pre></td></tr>
   1332 
   1333 
   1334 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasOperatorName0')"><a name="hasOperatorName0Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
   1335 <tr><td colspan="4" class="doc" id="hasOperatorName0"><pre>Matches the operator Name of operator expressions (binary or
   1336 unary).
   1337 
   1338 Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
   1339   !(a || b)
   1340 </pre></td></tr>
   1341 
   1342 
   1343 <tr><td>Matcher&lt;CXXBoolLiteral&gt;</td><td class="name" onclick="toggle('equals2')"><a name="equals2Anchor">equals</a></td><td>ValueT  Value</td></tr>
   1344 <tr><td colspan="4" class="doc" id="equals2"><pre>Matches literals that are equal to the given value.
   1345 
   1346 Example matches true (matcher = boolLiteral(equals(true)))
   1347   true
   1348 
   1349 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
   1350            Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
   1351 </pre></td></tr>
   1352 
   1353 
   1354 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs1')"><a name="argumentCountIs1Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
   1355 <tr><td colspan="4" class="doc" id="argumentCountIs1"><pre>Checks that a call expression or a constructor call expression has
   1356 a specific number of arguments (including absent default arguments).
   1357 
   1358 Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
   1359   void f(int x, int y);
   1360   f(0, 0);
   1361 </pre></td></tr>
   1362 
   1363 
   1364 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('isListInitialization0')"><a name="isListInitialization0Anchor">isListInitialization</a></td><td></td></tr>
   1365 <tr><td colspan="4" class="doc" id="isListInitialization0"><pre>Matches a constructor call expression which uses list initialization.
   1366 </pre></td></tr>
   1367 
   1368 
   1369 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('isWritten0')"><a name="isWritten0Anchor">isWritten</a></td><td></td></tr>
   1370 <tr><td colspan="4" class="doc" id="isWritten0"><pre>Matches a constructor initializer if it is explicitly written in
   1371 code (as opposed to implicitly added by the compiler).
   1372 
   1373 Given
   1374   struct Foo {
   1375     Foo() { }
   1376     Foo(int) : foo_("A") { }
   1377     string foo_;
   1378   };
   1379 constructorDecl(hasAnyConstructorInitializer(isWritten()))
   1380   will match Foo(int), but not Foo()
   1381 </pre></td></tr>
   1382 
   1383 
   1384 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName0')"><a name="hasOverloadedOperatorName0Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
   1385 <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName0"><pre>Matches overloaded operator names.
   1386 
   1387 Matches overloaded operator names specified in strings without the
   1388 "operator" prefix: e.g. "&lt;&lt;".
   1389 
   1390 Given:
   1391   class A { int operator*(); };
   1392   const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
   1393   A a;
   1394   a &lt;&lt; a;   &lt;-- This matches
   1395 
   1396 operatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the specified
   1397 line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
   1398 the declaration of A.
   1399 
   1400 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;
   1401 </pre></td></tr>
   1402 
   1403 
   1404 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isConst0')"><a name="isConst0Anchor">isConst</a></td><td></td></tr>
   1405 <tr><td colspan="4" class="doc" id="isConst0"><pre>Matches if the given method declaration is const.
   1406 
   1407 Given
   1408 struct A {
   1409   void foo() const;
   1410   void bar();
   1411 };
   1412 
   1413 methodDecl(isConst()) matches A::foo() but not A::bar()
   1414 </pre></td></tr>
   1415 
   1416 
   1417 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isOverride0')"><a name="isOverride0Anchor">isOverride</a></td><td></td></tr>
   1418 <tr><td colspan="4" class="doc" id="isOverride0"><pre>Matches if the given method declaration overrides another method.
   1419 
   1420 Given
   1421   class A {
   1422    public:
   1423     virtual void x();
   1424   };
   1425   class B : public A {
   1426    public:
   1427     virtual void x();
   1428   };
   1429   matches B::x
   1430 </pre></td></tr>
   1431 
   1432 
   1433 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isPure0')"><a name="isPure0Anchor">isPure</a></td><td></td></tr>
   1434 <tr><td colspan="4" class="doc" id="isPure0"><pre>Matches if the given method declaration is pure.
   1435 
   1436 Given
   1437   class A {
   1438    public:
   1439     virtual void x() = 0;
   1440   };
   1441   matches A::x
   1442 </pre></td></tr>
   1443 
   1444 
   1445 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isVirtual0')"><a name="isVirtual0Anchor">isVirtual</a></td><td></td></tr>
   1446 <tr><td colspan="4" class="doc" id="isVirtual0"><pre>Matches if the given method declaration is virtual.
   1447 
   1448 Given
   1449   class A {
   1450    public:
   1451     virtual void x();
   1452   };
   1453   matches A::x
   1454 </pre></td></tr>
   1455 
   1456 
   1457 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName1')"><a name="hasOverloadedOperatorName1Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
   1458 <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName1"><pre>Matches overloaded operator names.
   1459 
   1460 Matches overloaded operator names specified in strings without the
   1461 "operator" prefix: e.g. "&lt;&lt;".
   1462 
   1463 Given:
   1464   class A { int operator*(); };
   1465   const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
   1466   A a;
   1467   a &lt;&lt; a;   &lt;-- This matches
   1468 
   1469 operatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the specified
   1470 line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
   1471 the declaration of A.
   1472 
   1473 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;
   1474 </pre></td></tr>
   1475 
   1476 
   1477 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isDerivedFrom1')"><a name="isDerivedFrom1Anchor">isDerivedFrom</a></td><td>StringRef BaseName</td></tr>
   1478 <tr><td colspan="4" class="doc" id="isDerivedFrom1"><pre>Overloaded method as shortcut for isDerivedFrom(hasName(...)).
   1479 </pre></td></tr>
   1480 
   1481 
   1482 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization2')"><a name="isExplicitTemplateSpecialization2Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
   1483 <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization2"><pre>Matches explicit template specializations of function, class, or
   1484 static member variable template instantiations.
   1485 
   1486 Given
   1487   template&lt;typename T&gt; void A(T t) { }
   1488   template&lt;&gt; void A(int N) { }
   1489 functionDecl(isExplicitTemplateSpecialization())
   1490   matches the specialization A&lt;int&gt;().
   1491 
   1492 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
   1493 </pre></td></tr>
   1494 
   1495 
   1496 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isSameOrDerivedFrom1')"><a name="isSameOrDerivedFrom1Anchor">isSameOrDerivedFrom</a></td><td>StringRef BaseName</td></tr>
   1497 <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom1"><pre>Overloaded method as shortcut for
   1498 isSameOrDerivedFrom(hasName(...)).
   1499 </pre></td></tr>
   1500 
   1501 
   1502 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation2')"><a name="isTemplateInstantiation2Anchor">isTemplateInstantiation</a></td><td></td></tr>
   1503 <tr><td colspan="4" class="doc" id="isTemplateInstantiation2"><pre>Matches template instantiations of function, class, or static
   1504 member variable template instantiations.
   1505 
   1506 Given
   1507   template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
   1508 or
   1509   template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
   1510 recordDecl(hasName("::X"), isTemplateInstantiation())
   1511   matches the template instantiation of X&lt;A&gt;.
   1512 
   1513 But given
   1514   template &lt;typename T&gt;  class X {}; class A {};
   1515   template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
   1516 recordDecl(hasName("::X"), isTemplateInstantiation())
   1517   does not match, as X&lt;A&gt; is an explicit template specialization.
   1518 
   1519 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
   1520 </pre></td></tr>
   1521 
   1522 
   1523 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs0')"><a name="argumentCountIs0Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
   1524 <tr><td colspan="4" class="doc" id="argumentCountIs0"><pre>Checks that a call expression or a constructor call expression has
   1525 a specific number of arguments (including absent default arguments).
   1526 
   1527 Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
   1528   void f(int x, int y);
   1529   f(0, 0);
   1530 </pre></td></tr>
   1531 
   1532 
   1533 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;</td><td class="name" onclick="toggle('equals3')"><a name="equals3Anchor">equals</a></td><td>ValueT  Value</td></tr>
   1534 <tr><td colspan="4" class="doc" id="equals3"><pre>Matches literals that are equal to the given value.
   1535 
   1536 Example matches true (matcher = boolLiteral(equals(true)))
   1537   true
   1538 
   1539 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
   1540            Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
   1541 </pre></td></tr>
   1542 
   1543 
   1544 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;</td><td class="name" onclick="toggle('statementCountIs0')"><a name="statementCountIs0Anchor">statementCountIs</a></td><td>unsigned N</td></tr>
   1545 <tr><td colspan="4" class="doc" id="statementCountIs0"><pre>Checks that a compound statement contains a specific number of
   1546 child statements.
   1547 
   1548 Example: Given
   1549   { for (;;) {} }
   1550 compoundStmt(statementCountIs(0)))
   1551   matches '{}'
   1552   but does not match the outer compound statement.
   1553 </pre></td></tr>
   1554 
   1555 
   1556 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConstantArrayType.html">ConstantArrayType</a>&gt;</td><td class="name" onclick="toggle('hasSize0')"><a name="hasSize0Anchor">hasSize</a></td><td>unsigned N</td></tr>
   1557 <tr><td colspan="4" class="doc" id="hasSize0"><pre>Matches ConstantArrayType nodes that have the specified size.
   1558 
   1559 Given
   1560   int a[42];
   1561   int b[2 * 21];
   1562   int c[41], d[43];
   1563 constantArrayType(hasSize(42))
   1564   matches "int a[42]" and "int b[2 * 21]"
   1565 </pre></td></tr>
   1566 
   1567 
   1568 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('declCountIs0')"><a name="declCountIs0Anchor">declCountIs</a></td><td>unsigned N</td></tr>
   1569 <tr><td colspan="4" class="doc" id="declCountIs0"><pre>Matches declaration statements that contain a specific number of
   1570 declarations.
   1571 
   1572 Example: Given
   1573   int a, b;
   1574   int c;
   1575   int d = 2, e;
   1576 declCountIs(2)
   1577   matches 'int a, b;' and 'int d = 2, e;', but not 'int c;'.
   1578 </pre></td></tr>
   1579 
   1580 
   1581 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode1')"><a name="equalsBoundNode1Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
   1582 <tr><td colspan="4" class="doc" id="equalsBoundNode1"><pre>Matches if a node equals a previously bound node.
   1583 
   1584 Matches a node if it equals the node previously bound to ID.
   1585 
   1586 Given
   1587   class X { int a; int b; };
   1588 recordDecl(
   1589     has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
   1590     has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
   1591   matches the class X, as a and b have the same type.
   1592 
   1593 Note that when multiple matches are involved via forEach* matchers,
   1594 equalsBoundNodes acts as a filter.
   1595 For example:
   1596 compoundStmt(
   1597     forEachDescendant(varDecl().bind("d")),
   1598     forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
   1599 will trigger a match for each combination of variable declaration
   1600 and reference to that variable declaration within a compound statement.
   1601 </pre></td></tr>
   1602 
   1603 
   1604 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('equalsNode0')"><a name="equalsNode0Anchor">equalsNode</a></td><td>Decl *Node</td></tr>
   1605 <tr><td colspan="4" class="doc" id="equalsNode0"><pre>Matches if a node equals another node.
   1606 
   1607 Decl has pointer identity in the AST.
   1608 </pre></td></tr>
   1609 
   1610 
   1611 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isImplicit0')"><a name="isImplicit0Anchor">isImplicit</a></td><td></td></tr>
   1612 <tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a declaration that has been implicitly added
   1613 by the compiler (eg. implicit defaultcopy constructors).
   1614 </pre></td></tr>
   1615 
   1616 
   1617 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPrivate0')"><a name="isPrivate0Anchor">isPrivate</a></td><td></td></tr>
   1618 <tr><td colspan="4" class="doc" id="isPrivate0"><pre>Matches private C++ declarations.
   1619 
   1620 Given
   1621   class C {
   1622   public:    int a;
   1623   protected: int b;
   1624   private:   int c;
   1625   };
   1626 fieldDecl(isPrivate())
   1627   matches 'int c;' 
   1628 </pre></td></tr>
   1629 
   1630 
   1631 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isProtected0')"><a name="isProtected0Anchor">isProtected</a></td><td></td></tr>
   1632 <tr><td colspan="4" class="doc" id="isProtected0"><pre>Matches protected C++ declarations.
   1633 
   1634 Given
   1635   class C {
   1636   public:    int a;
   1637   protected: int b;
   1638   private:   int c;
   1639   };
   1640 fieldDecl(isProtected())
   1641   matches 'int b;' 
   1642 </pre></td></tr>
   1643 
   1644 
   1645 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPublic0')"><a name="isPublic0Anchor">isPublic</a></td><td></td></tr>
   1646 <tr><td colspan="4" class="doc" id="isPublic0"><pre>Matches public C++ declarations.
   1647 
   1648 Given
   1649   class C {
   1650   public:    int a;
   1651   protected: int b;
   1652   private:   int c;
   1653   };
   1654 fieldDecl(isPublic())
   1655   matches 'int a;' 
   1656 </pre></td></tr>
   1657 
   1658 
   1659 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;</td><td class="name" onclick="toggle('equals1')"><a name="equals1Anchor">equals</a></td><td>ValueT  Value</td></tr>
   1660 <tr><td colspan="4" class="doc" id="equals1"><pre>Matches literals that are equal to the given value.
   1661 
   1662 Example matches true (matcher = boolLiteral(equals(true)))
   1663   true
   1664 
   1665 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
   1666            Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
   1667 </pre></td></tr>
   1668 
   1669 
   1670 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition2')"><a name="isDefinition2Anchor">isDefinition</a></td><td></td></tr>
   1671 <tr><td colspan="4" class="doc" id="isDefinition2"><pre>Matches if a declaration has a body attached.
   1672 
   1673 Example matches A, va, fa
   1674   class A {};
   1675   class B;  Doesn't match, as it has no body.
   1676   int va;
   1677   extern int vb;  Doesn't match, as it doesn't define the variable.
   1678   void fa() {}
   1679   void fb();  Doesn't match, as it has no body.
   1680 
   1681 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
   1682 </pre></td></tr>
   1683 
   1684 
   1685 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization0')"><a name="isExplicitTemplateSpecialization0Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
   1686 <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization0"><pre>Matches explicit template specializations of function, class, or
   1687 static member variable template instantiations.
   1688 
   1689 Given
   1690   template&lt;typename T&gt; void A(T t) { }
   1691   template&lt;&gt; void A(int N) { }
   1692 functionDecl(isExplicitTemplateSpecialization())
   1693   matches the specialization A&lt;int&gt;().
   1694 
   1695 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
   1696 </pre></td></tr>
   1697 
   1698 
   1699 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isExternC0')"><a name="isExternC0Anchor">isExternC</a></td><td></td></tr>
   1700 <tr><td colspan="4" class="doc" id="isExternC0"><pre>Matches extern "C" function declarations.
   1701 
   1702 Given:
   1703   extern "C" void f() {}
   1704   extern "C" { void g() {} }
   1705   void h() {}
   1706 functionDecl(isExternC())
   1707   matches the declaration of f and g, but not the declaration h
   1708 </pre></td></tr>
   1709 
   1710 
   1711 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation0')"><a name="isTemplateInstantiation0Anchor">isTemplateInstantiation</a></td><td></td></tr>
   1712 <tr><td colspan="4" class="doc" id="isTemplateInstantiation0"><pre>Matches template instantiations of function, class, or static
   1713 member variable template instantiations.
   1714 
   1715 Given
   1716   template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
   1717 or
   1718   template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
   1719 recordDecl(hasName("::X"), isTemplateInstantiation())
   1720   matches the template instantiation of X&lt;A&gt;.
   1721 
   1722 But given
   1723   template &lt;typename T&gt;  class X {}; class A {};
   1724   template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
   1725 recordDecl(hasName("::X"), isTemplateInstantiation())
   1726   does not match, as X&lt;A&gt; is an explicit template specialization.
   1727 
   1728 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
   1729 </pre></td></tr>
   1730 
   1731 
   1732 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('parameterCountIs0')"><a name="parameterCountIs0Anchor">parameterCountIs</a></td><td>unsigned N</td></tr>
   1733 <tr><td colspan="4" class="doc" id="parameterCountIs0"><pre>Matches FunctionDecls that have a specific parameter count.
   1734 
   1735 Given
   1736   void f(int i) {}
   1737   void g(int i, int j) {}
   1738 functionDecl(parameterCountIs(2))
   1739   matches g(int i, int j) {}
   1740 </pre></td></tr>
   1741 
   1742 
   1743 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;</td><td class="name" onclick="toggle('equals0')"><a name="equals0Anchor">equals</a></td><td>ValueT  Value</td></tr>
   1744 <tr><td colspan="4" class="doc" id="equals0"><pre>Matches literals that are equal to the given value.
   1745 
   1746 Example matches true (matcher = boolLiteral(equals(true)))
   1747   true
   1748 
   1749 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
   1750            Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
   1751 </pre></td></tr>
   1752 
   1753 
   1754 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('isArrow0')"><a name="isArrow0Anchor">isArrow</a></td><td></td></tr>
   1755 <tr><td colspan="4" class="doc" id="isArrow0"><pre>Matches member expressions that are called with '-&gt;' as opposed
   1756 to '.'.
   1757 
   1758 Member calls on the implicit this pointer match as called with '-&gt;'.
   1759 
   1760 Given
   1761   class Y {
   1762     void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
   1763     int a;
   1764     static int b;
   1765   };
   1766 memberExpr(isArrow())
   1767   matches this-&gt;x, x, y.x, a, this-&gt;b
   1768 </pre></td></tr>
   1769 
   1770 
   1771 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasName0')"><a name="hasName0Anchor">hasName</a></td><td>std::string Name</td></tr>
   1772 <tr><td colspan="4" class="doc" id="hasName0"><pre>Matches NamedDecl nodes that have the specified name.
   1773 
   1774 Supports specifying enclosing namespaces or classes by prefixing the name
   1775 with '&lt;enclosing&gt;::'.
   1776 Does not match typedefs of an underlying type with the given name.
   1777 
   1778 Example matches X (Name == "X")
   1779   class X;
   1780 
   1781 Example matches X (Name is one of "::a::b::X", "a::b::X", "b::X", "X")
   1782   namespace a { namespace b { class X; } }
   1783 </pre></td></tr>
   1784 
   1785 
   1786 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('matchesName0')"><a name="matchesName0Anchor">matchesName</a></td><td>std::string RegExp</td></tr>
   1787 <tr><td colspan="4" class="doc" id="matchesName0"><pre>Matches NamedDecl nodes whose fully qualified names contain
   1788 a substring matched by the given RegExp.
   1789 
   1790 Supports specifying enclosing namespaces or classes by
   1791 prefixing the name with '&lt;enclosing&gt;::'.  Does not match typedefs
   1792 of an underlying type with the given name.
   1793 
   1794 Example matches X (regexp == "::X")
   1795   class X;
   1796 
   1797 Example matches X (regexp is one of "::X", "^foo::.*X", among others)
   1798   namespace foo { namespace bar { class X; } }
   1799 </pre></td></tr>
   1800 
   1801 
   1802 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('asString0')"><a name="asString0Anchor">asString</a></td><td>std::string Name</td></tr>
   1803 <tr><td colspan="4" class="doc" id="asString0"><pre>Matches if the matched type is represented by the given string.
   1804 
   1805 Given
   1806   class Y { public: void x(); };
   1807   void z() { Y* y; y-&gt;x(); }
   1808 callExpr(on(hasType(asString("class Y *"))))
   1809   matches y-&gt;x()
   1810 </pre></td></tr>
   1811 
   1812 
   1813 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode3')"><a name="equalsBoundNode3Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
   1814 <tr><td colspan="4" class="doc" id="equalsBoundNode3"><pre>Matches if a node equals a previously bound node.
   1815 
   1816 Matches a node if it equals the node previously bound to ID.
   1817 
   1818 Given
   1819   class X { int a; int b; };
   1820 recordDecl(
   1821     has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
   1822     has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
   1823   matches the class X, as a and b have the same type.
   1824 
   1825 Note that when multiple matches are involved via forEach* matchers,
   1826 equalsBoundNodes acts as a filter.
   1827 For example:
   1828 compoundStmt(
   1829     forEachDescendant(varDecl().bind("d")),
   1830     forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
   1831 will trigger a match for each combination of variable declaration
   1832 and reference to that variable declaration within a compound statement.
   1833 </pre></td></tr>
   1834 
   1835 
   1836 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasLocalQualifiers0')"><a name="hasLocalQualifiers0Anchor">hasLocalQualifiers</a></td><td></td></tr>
   1837 <tr><td colspan="4" class="doc" id="hasLocalQualifiers0"><pre>Matches QualType nodes that have local CV-qualifiers attached to
   1838 the node, not hidden within a typedef.
   1839 
   1840 Given
   1841   typedef const int const_int;
   1842   const_int i;
   1843   int *const j;
   1844   int *volatile k;
   1845   int m;
   1846 varDecl(hasType(hasLocalQualifiers())) matches only j and k.
   1847 i is const-qualified but the qualifier is not local.
   1848 </pre></td></tr>
   1849 
   1850 
   1851 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isConstQualified0')"><a name="isConstQualified0Anchor">isConstQualified</a></td><td></td></tr>
   1852 <tr><td colspan="4" class="doc" id="isConstQualified0"><pre>Matches QualType nodes that are const-qualified, i.e., that
   1853 include "top-level" const.
   1854 
   1855 Given
   1856   void a(int);
   1857   void b(int const);
   1858   void c(const int);
   1859   void d(const int*);
   1860   void e(int const) {};
   1861 functionDecl(hasAnyParameter(hasType(isConstQualified())))
   1862   matches "void b(int const)", "void c(const int)" and
   1863   "void e(int const) {}". It does not match d as there
   1864   is no top-level const on the parameter type "const int *".
   1865 </pre></td></tr>
   1866 
   1867 
   1868 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isInteger0')"><a name="isInteger0Anchor">isInteger</a></td><td></td></tr>
   1869 <tr><td colspan="4" class="doc" id="isInteger0"><pre>Matches QualType nodes that are of integer type.
   1870 
   1871 Given
   1872   void a(int);
   1873   void b(long);
   1874   void c(double);
   1875 functionDecl(hasAnyParameter(hasType(isInteger())))
   1876 matches "a(int)", "b(long)", but not "c(double)".
   1877 </pre></td></tr>
   1878 
   1879 
   1880 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode0')"><a name="equalsBoundNode0Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
   1881 <tr><td colspan="4" class="doc" id="equalsBoundNode0"><pre>Matches if a node equals a previously bound node.
   1882 
   1883 Matches a node if it equals the node previously bound to ID.
   1884 
   1885 Given
   1886   class X { int a; int b; };
   1887 recordDecl(
   1888     has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
   1889     has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
   1890   matches the class X, as a and b have the same type.
   1891 
   1892 Note that when multiple matches are involved via forEach* matchers,
   1893 equalsBoundNodes acts as a filter.
   1894 For example:
   1895 compoundStmt(
   1896     forEachDescendant(varDecl().bind("d")),
   1897     forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
   1898 will trigger a match for each combination of variable declaration
   1899 and reference to that variable declaration within a compound statement.
   1900 </pre></td></tr>
   1901 
   1902 
   1903 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('equalsNode1')"><a name="equalsNode1Anchor">equalsNode</a></td><td>Stmt *Node</td></tr>
   1904 <tr><td colspan="4" class="doc" id="equalsNode1"><pre>Matches if a node equals another node.
   1905 
   1906 Stmt has pointer identity in the AST.
   1907 
   1908 </pre></td></tr>
   1909 
   1910 
   1911 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition0')"><a name="isDefinition0Anchor">isDefinition</a></td><td></td></tr>
   1912 <tr><td colspan="4" class="doc" id="isDefinition0"><pre>Matches if a declaration has a body attached.
   1913 
   1914 Example matches A, va, fa
   1915   class A {};
   1916   class B;  Doesn't match, as it has no body.
   1917   int va;
   1918   extern int vb;  Doesn't match, as it doesn't define the variable.
   1919   void fa() {}
   1920   void fb();  Doesn't match, as it has no body.
   1921 
   1922 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
   1923 </pre></td></tr>
   1924 
   1925 
   1926 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode2')"><a name="equalsBoundNode2Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
   1927 <tr><td colspan="4" class="doc" id="equalsBoundNode2"><pre>Matches if a node equals a previously bound node.
   1928 
   1929 Matches a node if it equals the node previously bound to ID.
   1930 
   1931 Given
   1932   class X { int a; int b; };
   1933 recordDecl(
   1934     has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
   1935     has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
   1936   matches the class X, as a and b have the same type.
   1937 
   1938 Note that when multiple matches are involved via forEach* matchers,
   1939 equalsBoundNodes acts as a filter.
   1940 For example:
   1941 compoundStmt(
   1942     forEachDescendant(varDecl().bind("d")),
   1943     forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
   1944 will trigger a match for each combination of variable declaration
   1945 and reference to that variable declaration within a compound statement.
   1946 </pre></td></tr>
   1947 
   1948 
   1949 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;</td><td class="name" onclick="toggle('ofKind0')"><a name="ofKind0Anchor">ofKind</a></td><td>UnaryExprOrTypeTrait Kind</td></tr>
   1950 <tr><td colspan="4" class="doc" id="ofKind0"><pre>Matches unary expressions of a certain kind.
   1951 
   1952 Given
   1953   int x;
   1954   int s = sizeof(x) + alignof(x)
   1955 unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf))
   1956   matches sizeof(x)
   1957 </pre></td></tr>
   1958 
   1959 
   1960 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasOperatorName1')"><a name="hasOperatorName1Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
   1961 <tr><td colspan="4" class="doc" id="hasOperatorName1"><pre>Matches the operator Name of operator expressions (binary or
   1962 unary).
   1963 
   1964 Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
   1965   !(a || b)
   1966 </pre></td></tr>
   1967 
   1968 
   1969 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasGlobalStorage0')"><a name="hasGlobalStorage0Anchor">hasGlobalStorage</a></td><td></td></tr>
   1970 <tr><td colspan="4" class="doc" id="hasGlobalStorage0"><pre>Matches a variable declaration that does not have local storage.
   1971 
   1972 Example matches y and z (matcher = varDecl(hasGlobalStorage())
   1973 void f() {
   1974   int x;
   1975   static int y;
   1976 }
   1977 int z;
   1978 </pre></td></tr>
   1979 
   1980 
   1981 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasLocalStorage0')"><a name="hasLocalStorage0Anchor">hasLocalStorage</a></td><td></td></tr>
   1982 <tr><td colspan="4" class="doc" id="hasLocalStorage0"><pre>Matches a variable declaration that has function scope and is a
   1983 non-static local variable.
   1984 
   1985 Example matches x (matcher = varDecl(hasLocalStorage())
   1986 void f() {
   1987   int x;
   1988   static int y;
   1989 }
   1990 int z;
   1991 </pre></td></tr>
   1992 
   1993 
   1994 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition1')"><a name="isDefinition1Anchor">isDefinition</a></td><td></td></tr>
   1995 <tr><td colspan="4" class="doc" id="isDefinition1"><pre>Matches if a declaration has a body attached.
   1996 
   1997 Example matches A, va, fa
   1998   class A {};
   1999   class B;  Doesn't match, as it has no body.
   2000   int va;
   2001   extern int vb;  Doesn't match, as it doesn't define the variable.
   2002   void fa() {}
   2003   void fb();  Doesn't match, as it has no body.
   2004 
   2005 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
   2006 </pre></td></tr>
   2007 
   2008 
   2009 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization1')"><a name="isExplicitTemplateSpecialization1Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
   2010 <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization1"><pre>Matches explicit template specializations of function, class, or
   2011 static member variable template instantiations.
   2012 
   2013 Given
   2014   template&lt;typename T&gt; void A(T t) { }
   2015   template&lt;&gt; void A(int N) { }
   2016 functionDecl(isExplicitTemplateSpecialization())
   2017   matches the specialization A&lt;int&gt;().
   2018 
   2019 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
   2020 </pre></td></tr>
   2021 
   2022 
   2023 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation1')"><a name="isTemplateInstantiation1Anchor">isTemplateInstantiation</a></td><td></td></tr>
   2024 <tr><td colspan="4" class="doc" id="isTemplateInstantiation1"><pre>Matches template instantiations of function, class, or static
   2025 member variable template instantiations.
   2026 
   2027 Given
   2028   template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
   2029 or
   2030   template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
   2031 recordDecl(hasName("::X"), isTemplateInstantiation())
   2032   matches the template instantiation of X&lt;A&gt;.
   2033 
   2034 But given
   2035   template &lt;typename T&gt;  class X {}; class A {};
   2036   template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
   2037 recordDecl(hasName("::X"), isTemplateInstantiation())
   2038   does not match, as X&lt;A&gt; is an explicit template specialization.
   2039 
   2040 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
   2041 </pre></td></tr>
   2042 
   2043 <!--END_NARROWING_MATCHERS -->
   2044 </table>
   2045 
   2046 <!-- ======================================================================= -->
   2047 <h2 id="traversal-matchers">AST Traversal Matchers</h2>
   2048 <!-- ======================================================================= -->
   2049 
   2050 <p>Traversal matchers specify the relationship to other nodes that are
   2051 reachable from the current node.</p>
   2052 
   2053 <p>Note that there are special traversal matchers (has, hasDescendant, forEach and
   2054 forEachDescendant) which work on all nodes and allow users to write more generic
   2055 match expressions.</p>
   2056 
   2057 <table>
   2058 <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
   2059 <!-- START_TRAVERSAL_MATCHERS -->
   2060 
   2061 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('eachOf0')"><a name="eachOf0Anchor">eachOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
   2062 <tr><td colspan="4" class="doc" id="eachOf0"><pre>Matches if any of the given matchers matches.
   2063 
   2064 Unlike anyOf, eachOf will generate a match result for each
   2065 matching submatcher.
   2066 
   2067 For example, in:
   2068   class A { int a; int b; };
   2069 The matcher:
   2070   recordDecl(eachOf(has(fieldDecl(hasName("a")).bind("v")),
   2071                     has(fieldDecl(hasName("b")).bind("v"))))
   2072 will generate two results binding "v", the first of which binds
   2073 the field declaration of a, the second the field declaration of
   2074 b.
   2075 
   2076 Usable as: Any Matcher
   2077 </pre></td></tr>
   2078 
   2079 
   2080 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEachDescendant0')"><a name="forEachDescendant0Anchor">forEachDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
   2081 <tr><td colspan="4" class="doc" id="forEachDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
   2082 provided matcher.
   2083 
   2084 Example matches X, A, B, C
   2085     (matcher = recordDecl(forEachDescendant(recordDecl(hasName("X")))))
   2086   class X {};  Matches X, because X::X is a class of name X inside X.
   2087   class A { class X {}; };
   2088   class B { class C { class X {}; }; };
   2089 
   2090 DescendantT must be an AST base type.
   2091 
   2092 As opposed to 'hasDescendant', 'forEachDescendant' will cause a match for
   2093 each result that matches instead of only on the first one.
   2094 
   2095 Note: Recursively combined ForEachDescendant can cause many matches:
   2096   recordDecl(forEachDescendant(recordDecl(forEachDescendant(recordDecl()))))
   2097 will match 10 times (plus injected class name matches) on:
   2098   class A { class B { class C { class D { class E {}; }; }; }; };
   2099 
   2100 Usable as: Any Matcher
   2101 </pre></td></tr>
   2102 
   2103 
   2104 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher&lt;*&gt;</td></tr>
   2105 <tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
   2106 provided matcher.
   2107 
   2108 Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))
   2109   class X {};  Matches X, because X::X is a class of name X inside X.
   2110   class Y { class X {}; };
   2111   class Z { class Y { class X {}; }; };  Does not match Z.
   2112 
   2113 ChildT must be an AST base type.
   2114 
   2115 As opposed to 'has', 'forEach' will cause a match for each result that
   2116 matches instead of only on the first one.
   2117 
   2118 Usable as: Any Matcher
   2119 </pre></td></tr>
   2120 
   2121 
   2122 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasAncestor0')"><a name="hasAncestor0Anchor">hasAncestor</a></td><td>Matcher&lt;*&gt;</td></tr>
   2123 <tr><td colspan="4" class="doc" id="hasAncestor0"><pre>Matches AST nodes that have an ancestor that matches the provided
   2124 matcher.
   2125 
   2126 Given
   2127 void f() { if (true) { int x = 42; } }
   2128 void g() { for (;;) { int x = 43; } }
   2129 expr(integerLiteral(hasAncestor(ifStmt()))) matches 42, but not 43.
   2130 
   2131 Usable as: Any Matcher
   2132 </pre></td></tr>
   2133 
   2134 
   2135 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasDescendant0')"><a name="hasDescendant0Anchor">hasDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
   2136 <tr><td colspan="4" class="doc" id="hasDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
   2137 provided matcher.
   2138 
   2139 Example matches X, Y, Z
   2140     (matcher = recordDecl(hasDescendant(recordDecl(hasName("X")))))
   2141   class X {};  Matches X, because X::X is a class of name X inside X.
   2142   class Y { class X {}; };
   2143   class Z { class Y { class X {}; }; };
   2144 
   2145 DescendantT must be an AST base type.
   2146 
   2147 Usable as: Any Matcher
   2148 </pre></td></tr>
   2149 
   2150 
   2151 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher&lt;*&gt;</td></tr>
   2152 <tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
   2153 provided matcher.
   2154 
   2155 Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
   2156   class X {};  Matches X, because X::X is a class of name X inside X.
   2157   class Y { class X {}; };
   2158   class Z { class Y { class X {}; }; };  Does not match Z.
   2159 
   2160 ChildT must be an AST base type.
   2161 
   2162 Usable as: Any Matcher
   2163 </pre></td></tr>
   2164 
   2165 
   2166 <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasParent0')"><a name="hasParent0Anchor">hasParent</a></td><td>Matcher&lt;*&gt;</td></tr>
   2167 <tr><td colspan="4" class="doc" id="hasParent0"><pre>Matches AST nodes that have a parent that matches the provided
   2168 matcher.
   2169 
   2170 Given
   2171 void f() { for (;;) { int x = 42; if (true) { int x = 43; } } }
   2172 compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }".
   2173 
   2174 Usable as: Any Matcher
   2175 </pre></td></tr>
   2176 
   2177 
   2178 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasBase0')"><a name="hasBase0Anchor">hasBase</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2179 <tr><td colspan="4" class="doc" id="hasBase0"><pre>Matches the base expression of an array subscript expression.
   2180 
   2181 Given
   2182   int i[5];
   2183   void f() { i[1] = 42; }
   2184 arraySubscriptExpression(hasBase(implicitCastExpr(
   2185     hasSourceExpression(declRefExpr()))))
   2186   matches i[1] with the declRefExpr() matching i
   2187 </pre></td></tr>
   2188 
   2189 
   2190 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasIndex0')"><a name="hasIndex0Anchor">hasIndex</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2191 <tr><td colspan="4" class="doc" id="hasIndex0"><pre>Matches the index expression of an array subscript expression.
   2192 
   2193 Given
   2194   int i[5];
   2195   void f() { i[1] = 42; }
   2196 arraySubscriptExpression(hasIndex(integerLiteral()))
   2197   matches i[1] with the integerLiteral() matching 1
   2198 </pre></td></tr>
   2199 
   2200 
   2201 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayTypeLoc.html">ArrayTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasElementTypeLoc0')"><a name="hasElementTypeLoc0Anchor">hasElementTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   2202 <tr><td colspan="4" class="doc" id="hasElementTypeLoc0"><pre>Matches arrays and C99 complex types that have a specific element
   2203 type.
   2204 
   2205 Given
   2206   struct A {};
   2207   A a[7];
   2208   int b[7];
   2209 arrayType(hasElementType(builtinType()))
   2210   matches "int b[7]"
   2211 
   2212 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
   2213 </pre></td></tr>
   2214 
   2215 
   2216 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;</td><td class="name" onclick="toggle('hasElementType0')"><a name="hasElementType0Anchor">hasElementType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   2217 <tr><td colspan="4" class="doc" id="hasElementType0"><pre>Matches arrays and C99 complex types that have a specific element
   2218 type.
   2219 
   2220 Given
   2221   struct A {};
   2222   A a[7];
   2223   int b[7];
   2224 arrayType(hasElementType(builtinType()))
   2225   matches "int b[7]"
   2226 
   2227 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
   2228 </pre></td></tr>
   2229 
   2230 
   2231 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicTypeLoc.html">AtomicTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasValueTypeLoc0')"><a name="hasValueTypeLoc0Anchor">hasValueTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   2232 <tr><td colspan="4" class="doc" id="hasValueTypeLoc0"><pre>Matches atomic types with a specific value type.
   2233 
   2234 Given
   2235   _Atomic(int) i;
   2236   _Atomic(float) f;
   2237 atomicType(hasValueType(isInteger()))
   2238  matches "_Atomic(int) i"
   2239 
   2240 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
   2241 </pre></td></tr>
   2242 
   2243 
   2244 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;</td><td class="name" onclick="toggle('hasValueType0')"><a name="hasValueType0Anchor">hasValueType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   2245 <tr><td colspan="4" class="doc" id="hasValueType0"><pre>Matches atomic types with a specific value type.
   2246 
   2247 Given
   2248   _Atomic(int) i;
   2249   _Atomic(float) f;
   2250 atomicType(hasValueType(isInteger()))
   2251  matches "_Atomic(int) i"
   2252 
   2253 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
   2254 </pre></td></tr>
   2255 
   2256 
   2257 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;</td><td class="name" onclick="toggle('hasDeducedType0')"><a name="hasDeducedType0Anchor">hasDeducedType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   2258 <tr><td colspan="4" class="doc" id="hasDeducedType0"><pre>Matches AutoType nodes where the deduced type is a specific type.
   2259 
   2260 Note: There is no TypeLoc for the deduced type and thus no
   2261 getDeducedLoc() matcher.
   2262 
   2263 Given
   2264   auto a = 1;
   2265   auto b = 2.0;
   2266 autoType(hasDeducedType(isInteger()))
   2267   matches "auto a"
   2268 
   2269 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;
   2270 </pre></td></tr>
   2271 
   2272 
   2273 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasEitherOperand0')"><a name="hasEitherOperand0Anchor">hasEitherOperand</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;  InnerMatcher</td></tr>
   2274 <tr><td colspan="4" class="doc" id="hasEitherOperand0"><pre>Matches if either the left hand side or the right hand side of a
   2275 binary operator matches.
   2276 </pre></td></tr>
   2277 
   2278 
   2279 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasLHS0')"><a name="hasLHS0Anchor">hasLHS</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2280 <tr><td colspan="4" class="doc" id="hasLHS0"><pre>Matches the left hand side of binary operator expressions.
   2281 
   2282 Example matches a (matcher = binaryOperator(hasLHS()))
   2283   a || b
   2284 </pre></td></tr>
   2285 
   2286 
   2287 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasRHS0')"><a name="hasRHS0Anchor">hasRHS</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2288 <tr><td colspan="4" class="doc" id="hasRHS0"><pre>Matches the right hand side of binary operator expressions.
   2289 
   2290 Example matches b (matcher = binaryOperator(hasRHS()))
   2291   a || b
   2292 </pre></td></tr>
   2293 
   2294 
   2295 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerTypeLoc.html">BlockPointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc0')"><a name="pointeeLoc0Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   2296 <tr><td colspan="4" class="doc" id="pointeeLoc0"><pre>Narrows PointerType (and similar) matchers to those where the
   2297 pointee matches a given matcher.
   2298 
   2299 Given
   2300   int *a;
   2301   int const *b;
   2302   float const *f;
   2303 pointerType(pointee(isConstQualified(), isInteger()))
   2304   matches "int const *b"
   2305 
   2306 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   2307   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   2308 </pre></td></tr>
   2309 
   2310 
   2311 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;</td><td class="name" onclick="toggle('pointee0')"><a name="pointee0Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   2312 <tr><td colspan="4" class="doc" id="pointee0"><pre>Narrows PointerType (and similar) matchers to those where the
   2313 pointee matches a given matcher.
   2314 
   2315 Given
   2316   int *a;
   2317   int const *b;
   2318   float const *f;
   2319 pointerType(pointee(isConstQualified(), isInteger()))
   2320   matches "int const *b"
   2321 
   2322 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   2323   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   2324 </pre></td></tr>
   2325 
   2326 
   2327 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyArgument1')"><a name="hasAnyArgument1Anchor">hasAnyArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2328 <tr><td colspan="4" class="doc" id="hasAnyArgument1"><pre>Matches any argument of a call expression or a constructor call
   2329 expression.
   2330 
   2331 Given
   2332   void x(int, int, int) { int y; x(1, y, 42); }
   2333 callExpr(hasAnyArgument(declRefExpr()))
   2334   matches x(1, y, 42)
   2335 with hasAnyArgument(...)
   2336   matching y
   2337 
   2338 FIXME: Currently this will ignore parentheses and implicit casts on
   2339 the argument before applying the inner matcher. We'll want to remove
   2340 this to allow for greater control by the user once ignoreImplicit()
   2341 has been implemented.
   2342 </pre></td></tr>
   2343 
   2344 
   2345 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument1')"><a name="hasArgument1Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2346 <tr><td colspan="4" class="doc" id="hasArgument1"><pre>Matches the n'th argument of a call expression or a constructor
   2347 call expression.
   2348 
   2349 Example matches y in x(y)
   2350     (matcher = callExpr(hasArgument(0, declRefExpr())))
   2351   void x(int) { int y; x(y); }
   2352 </pre></td></tr>
   2353 
   2354 
   2355 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration12')"><a name="hasDeclaration12Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   2356 <tr><td colspan="4" class="doc" id="hasDeclaration12"><pre>Matches a node if the declaration associated with that node
   2357 matches the given matcher.
   2358 
   2359 The associated declaration is:
   2360 - for type nodes, the declaration of the underlying type
   2361 - for CallExpr, the declaration of the callee
   2362 - for MemberExpr, the declaration of the referenced member
   2363 - for CXXConstructExpr, the declaration of the constructor
   2364 
   2365 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   2366 function. e.g. various subtypes of clang::Type and various expressions.
   2367 
   2368 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   2369   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   2370   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   2371   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   2372   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   2373   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   2374 </pre></td></tr>
   2375 
   2376 
   2377 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('forEachConstructorInitializer0')"><a name="forEachConstructorInitializer0Anchor">forEachConstructorInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt; InnerMatcher</td></tr>
   2378 <tr><td colspan="4" class="doc" id="forEachConstructorInitializer0"><pre>Matches each constructor initializer in a constructor definition.
   2379 
   2380 Given
   2381   class A { A() : i(42), j(42) {} int i; int j; };
   2382 constructorDecl(forEachConstructorInitializer(forField(decl().bind("x"))))
   2383   will trigger two matches, binding for 'i' and 'j' respectively.
   2384 </pre></td></tr>
   2385 
   2386 
   2387 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyConstructorInitializer0')"><a name="hasAnyConstructorInitializer0Anchor">hasAnyConstructorInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt; InnerMatcher</td></tr>
   2388 <tr><td colspan="4" class="doc" id="hasAnyConstructorInitializer0"><pre>Matches a constructor initializer.
   2389 
   2390 Given
   2391   struct Foo {
   2392     Foo() : foo_(1) { }
   2393     int foo_;
   2394   };
   2395 recordDecl(has(constructorDecl(hasAnyConstructorInitializer(anything()))))
   2396   record matches Foo, hasAnyConstructorInitializer matches foo_(1)
   2397 </pre></td></tr>
   2398 
   2399 
   2400 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('forField0')"><a name="forField0Anchor">forField</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt; InnerMatcher</td></tr>
   2401 <tr><td colspan="4" class="doc" id="forField0"><pre>Matches the field declaration of a constructor initializer.
   2402 
   2403 Given
   2404   struct Foo {
   2405     Foo() : foo_(1) { }
   2406     int foo_;
   2407   };
   2408 recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
   2409     forField(hasName("foo_"))))))
   2410   matches Foo
   2411 with forField matching foo_
   2412 </pre></td></tr>
   2413 
   2414 
   2415 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('withInitializer0')"><a name="withInitializer0Anchor">withInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2416 <tr><td colspan="4" class="doc" id="withInitializer0"><pre>Matches the initializer expression of a constructor initializer.
   2417 
   2418 Given
   2419   struct Foo {
   2420     Foo() : foo_(1) { }
   2421     int foo_;
   2422   };
   2423 recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
   2424     withInitializer(integerLiteral(equals(1)))))))
   2425   matches Foo
   2426 with withInitializer matching (1)
   2427 </pre></td></tr>
   2428 
   2429 
   2430 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody3')"><a name="hasBody3Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   2431 <tr><td colspan="4" class="doc" id="hasBody3"><pre>Matches a 'for', 'while', or 'do while' statement that has
   2432 a given body.
   2433 
   2434 Given
   2435   for (;;) {}
   2436 hasBody(compoundStmt())
   2437   matches 'for (;;) {}'
   2438 with compoundStmt()
   2439   matching '{}'
   2440 </pre></td></tr>
   2441 
   2442 
   2443 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasLoopVariable0')"><a name="hasLoopVariable0Anchor">hasLoopVariable</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt; InnerMatcher</td></tr>
   2444 <tr><td colspan="4" class="doc" id="hasLoopVariable0"><pre>Matches the initialization statement of a for loop.
   2445 
   2446 Example:
   2447     forStmt(hasLoopVariable(anything()))
   2448 matches 'int x' in
   2449     for (int x : a) { }
   2450 </pre></td></tr>
   2451 
   2452 
   2453 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasRangeInit0')"><a name="hasRangeInit0Anchor">hasRangeInit</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2454 <tr><td colspan="4" class="doc" id="hasRangeInit0"><pre>Matches the range initialization statement of a for loop.
   2455 
   2456 Example:
   2457     forStmt(hasRangeInit(anything()))
   2458 matches 'a' in
   2459     for (int x : a) { }
   2460 </pre></td></tr>
   2461 
   2462 
   2463 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2464 <tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
   2465 
   2466 
   2467 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('on0')"><a name="on0Anchor">on</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2468 <tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
   2469 
   2470 Example matches y.x() (matcher = callExpr(on(hasType(recordDecl(hasName("Y"))))))
   2471   class Y { public: void x(); };
   2472   void z() { Y y; y.x(); }",
   2473 
   2474 FIXME: Overload to allow directly matching types?
   2475 </pre></td></tr>
   2476 
   2477 
   2478 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('thisPointerType1')"><a name="thisPointerType1Anchor">thisPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2479 <tr><td colspan="4" class="doc" id="thisPointerType1"><pre>Overloaded to match the type's declaration.
   2480 </pre></td></tr>
   2481 
   2482 
   2483 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('thisPointerType0')"><a name="thisPointerType0Anchor">thisPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   2484 <tr><td colspan="4" class="doc" id="thisPointerType0"><pre>Matches if the expression's type either matches the specified
   2485 matcher, or is a pointer to a type that matches the InnerMatcher.
   2486 </pre></td></tr>
   2487 
   2488 
   2489 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('ofClass0')"><a name="ofClass0Anchor">ofClass</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt; InnerMatcher</td></tr>
   2490 <tr><td colspan="4" class="doc" id="ofClass0"><pre>Matches the class declaration that the given method declaration
   2491 belongs to.
   2492 
   2493 FIXME: Generalize this for other kinds of declarations.
   2494 FIXME: What other kind of declarations would we need to generalize
   2495 this to?
   2496 
   2497 Example matches A() in the last line
   2498     (matcher = constructExpr(hasDeclaration(methodDecl(
   2499         ofClass(hasName("A"))))))
   2500   class A {
   2501    public:
   2502     A();
   2503   };
   2504   A a = A();
   2505 </pre></td></tr>
   2506 
   2507 
   2508 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('hasMethod0')"><a name="hasMethod0Anchor">hasMethod</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt; InnerMatcher</td></tr>
   2509 <tr><td colspan="4" class="doc" id="hasMethod0"><pre>Matches the first method of a class or struct that satisfies InnerMatcher.
   2510 
   2511 Given:
   2512   class A { void func(); };
   2513   class B { void member(); };
   2514 
   2515 recordDecl(hasMethod(hasName("func"))) matches the declaration of A
   2516 but not B.
   2517 </pre></td></tr>
   2518 
   2519 
   2520 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isDerivedFrom0')"><a name="isDerivedFrom0Anchor">isDerivedFrom</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; Base</td></tr>
   2521 <tr><td colspan="4" class="doc" id="isDerivedFrom0"><pre>Matches C++ classes that are directly or indirectly derived from
   2522 a class matching Base.
   2523 
   2524 Note that a class is not considered to be derived from itself.
   2525 
   2526 Example matches Y, Z, C (Base == hasName("X"))
   2527   class X;
   2528   class Y : public X {};  directly derived
   2529   class Z : public Y {};  indirectly derived
   2530   typedef X A;
   2531   typedef A B;
   2532   class C : public B {};  derived from a typedef of X
   2533 
   2534 In the following example, Bar matches isDerivedFrom(hasName("X")):
   2535   class Foo;
   2536   typedef Foo X;
   2537   class Bar : public Foo {};  derived from a type that X is a typedef of
   2538 </pre></td></tr>
   2539 
   2540 
   2541 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isSameOrDerivedFrom0')"><a name="isSameOrDerivedFrom0Anchor">isSameOrDerivedFrom</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; Base</td></tr>
   2542 <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom0"><pre>Similar to isDerivedFrom(), but also matches classes that directly
   2543 match Base.
   2544 </pre></td></tr>
   2545 
   2546 
   2547 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('callee1')"><a name="callee1Anchor">callee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2548 <tr><td colspan="4" class="doc" id="callee1"><pre>Matches if the call expression's callee's declaration matches the
   2549 given matcher.
   2550 
   2551 Example matches y.x() (matcher = callExpr(callee(methodDecl(hasName("x")))))
   2552   class Y { public: void x(); };
   2553   void z() { Y y; y.x();
   2554 </pre></td></tr>
   2555 
   2556 
   2557 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('callee0')"><a name="callee0Anchor">callee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   2558 <tr><td colspan="4" class="doc" id="callee0"><pre>Matches if the call expression's callee expression matches.
   2559 
   2560 Given
   2561   class Y { void x() { this-&gt;x(); x(); Y y; y.x(); } };
   2562   void f() { f(); }
   2563 callExpr(callee(expr()))
   2564   matches this-&gt;x(), x(), y.x(), f()
   2565 with callee(...)
   2566   matching this-&gt;x, x, y.x, f respectively
   2567 
   2568 Note: Callee cannot take the more general internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;
   2569 because this introduces ambiguous overloads with calls to Callee taking a
   2570 internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, as the matcher hierarchy is purely
   2571 implemented in terms of implicit casts.
   2572 </pre></td></tr>
   2573 
   2574 
   2575 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyArgument0')"><a name="hasAnyArgument0Anchor">hasAnyArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2576 <tr><td colspan="4" class="doc" id="hasAnyArgument0"><pre>Matches any argument of a call expression or a constructor call
   2577 expression.
   2578 
   2579 Given
   2580   void x(int, int, int) { int y; x(1, y, 42); }
   2581 callExpr(hasAnyArgument(declRefExpr()))
   2582   matches x(1, y, 42)
   2583 with hasAnyArgument(...)
   2584   matching y
   2585 
   2586 FIXME: Currently this will ignore parentheses and implicit casts on
   2587 the argument before applying the inner matcher. We'll want to remove
   2588 this to allow for greater control by the user once ignoreImplicit()
   2589 has been implemented.
   2590 </pre></td></tr>
   2591 
   2592 
   2593 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument0')"><a name="hasArgument0Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2594 <tr><td colspan="4" class="doc" id="hasArgument0"><pre>Matches the n'th argument of a call expression or a constructor
   2595 call expression.
   2596 
   2597 Example matches y in x(y)
   2598     (matcher = callExpr(hasArgument(0, declRefExpr())))
   2599   void x(int) { int y; x(y); }
   2600 </pre></td></tr>
   2601 
   2602 
   2603 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration13')"><a name="hasDeclaration13Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   2604 <tr><td colspan="4" class="doc" id="hasDeclaration13"><pre>Matches a node if the declaration associated with that node
   2605 matches the given matcher.
   2606 
   2607 The associated declaration is:
   2608 - for type nodes, the declaration of the underlying type
   2609 - for CallExpr, the declaration of the callee
   2610 - for MemberExpr, the declaration of the referenced member
   2611 - for CXXConstructExpr, the declaration of the constructor
   2612 
   2613 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   2614 function. e.g. various subtypes of clang::Type and various expressions.
   2615 
   2616 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   2617   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   2618   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   2619   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   2620   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   2621   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   2622 </pre></td></tr>
   2623 
   2624 
   2625 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CaseStmt.html">CaseStmt</a>&gt;</td><td class="name" onclick="toggle('hasCaseConstant0')"><a name="hasCaseConstant0Anchor">hasCaseConstant</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2626 <tr><td colspan="4" class="doc" id="hasCaseConstant0"><pre>If the given case statement does not use the GNU case range
   2627 extension, matches the constant given in the statement.
   2628 
   2629 Given
   2630   switch (1) { case 1: case 1+1: case 3 ... 4: ; }
   2631 caseStmt(hasCaseConstant(integerLiteral()))
   2632   matches "case 1:"
   2633 </pre></td></tr>
   2634 
   2635 
   2636 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;</td><td class="name" onclick="toggle('hasSourceExpression0')"><a name="hasSourceExpression0Anchor">hasSourceExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2637 <tr><td colspan="4" class="doc" id="hasSourceExpression0"><pre>Matches if the cast's source expression matches the given matcher.
   2638 
   2639 Example: matches "a string" (matcher =
   2640                                  hasSourceExpression(constructExpr()))
   2641 class URL { URL(string); };
   2642 URL url = "a string";
   2643 </pre></td></tr>
   2644 
   2645 
   2646 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument0')"><a name="hasAnyTemplateArgument0Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
   2647 <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument0"><pre>Matches classTemplateSpecializations that have at least one
   2648 TemplateArgument matching the given InnerMatcher.
   2649 
   2650 Given
   2651   template&lt;typename T&gt; class A {};
   2652   template&lt;&gt; class A&lt;double&gt; {};
   2653   A&lt;int&gt; a;
   2654 classTemplateSpecializationDecl(hasAnyTemplateArgument(
   2655     refersToType(asString("int"))))
   2656   matches the specialization A&lt;int&gt;
   2657 </pre></td></tr>
   2658 
   2659 
   2660 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument0')"><a name="hasTemplateArgument0Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
   2661 <tr><td colspan="4" class="doc" id="hasTemplateArgument0"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
   2662 matches the given InnerMatcher.
   2663 
   2664 Given
   2665   template&lt;typename T, typename U&gt; class A {};
   2666   A&lt;bool, int&gt; b;
   2667   A&lt;int, bool&gt; c;
   2668 classTemplateSpecializationDecl(hasTemplateArgument(
   2669     1, refersToType(asString("int"))))
   2670   matches the specialization A&lt;bool, int&gt;
   2671 </pre></td></tr>
   2672 
   2673 
   2674 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexTypeLoc.html">ComplexTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasElementTypeLoc1')"><a name="hasElementTypeLoc1Anchor">hasElementTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   2675 <tr><td colspan="4" class="doc" id="hasElementTypeLoc1"><pre>Matches arrays and C99 complex types that have a specific element
   2676 type.
   2677 
   2678 Given
   2679   struct A {};
   2680   A a[7];
   2681   int b[7];
   2682 arrayType(hasElementType(builtinType()))
   2683   matches "int b[7]"
   2684 
   2685 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
   2686 </pre></td></tr>
   2687 
   2688 
   2689 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;</td><td class="name" onclick="toggle('hasElementType1')"><a name="hasElementType1Anchor">hasElementType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   2690 <tr><td colspan="4" class="doc" id="hasElementType1"><pre>Matches arrays and C99 complex types that have a specific element
   2691 type.
   2692 
   2693 Given
   2694   struct A {};
   2695   A a[7];
   2696   int b[7];
   2697 arrayType(hasElementType(builtinType()))
   2698   matches "int b[7]"
   2699 
   2700 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
   2701 </pre></td></tr>
   2702 
   2703 
   2704 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;</td><td class="name" onclick="toggle('hasAnySubstatement0')"><a name="hasAnySubstatement0Anchor">hasAnySubstatement</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   2705 <tr><td colspan="4" class="doc" id="hasAnySubstatement0"><pre>Matches compound statements where at least one substatement matches
   2706 a given matcher.
   2707 
   2708 Given
   2709   { {}; 1+2; }
   2710 hasAnySubstatement(compoundStmt())
   2711   matches '{ {}; 1+2; }'
   2712 with compoundStmt()
   2713   matching '{}'
   2714 </pre></td></tr>
   2715 
   2716 
   2717 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasCondition4')"><a name="hasCondition4Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2718 <tr><td colspan="4" class="doc" id="hasCondition4"><pre>Matches the condition expression of an if statement, for loop,
   2719 or conditional operator.
   2720 
   2721 Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
   2722   if (true) {}
   2723 </pre></td></tr>
   2724 
   2725 
   2726 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasFalseExpression0')"><a name="hasFalseExpression0Anchor">hasFalseExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2727 <tr><td colspan="4" class="doc" id="hasFalseExpression0"><pre>Matches the false branch expression of a conditional operator.
   2728 
   2729 Example matches b
   2730   condition ? a : b
   2731 </pre></td></tr>
   2732 
   2733 
   2734 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasTrueExpression0')"><a name="hasTrueExpression0Anchor">hasTrueExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2735 <tr><td colspan="4" class="doc" id="hasTrueExpression0"><pre>Matches the true branch expression of a conditional operator.
   2736 
   2737 Example matches a
   2738   condition ? a : b
   2739 </pre></td></tr>
   2740 
   2741 
   2742 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration11')"><a name="hasDeclaration11Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   2743 <tr><td colspan="4" class="doc" id="hasDeclaration11"><pre>Matches a node if the declaration associated with that node
   2744 matches the given matcher.
   2745 
   2746 The associated declaration is:
   2747 - for type nodes, the declaration of the underlying type
   2748 - for CallExpr, the declaration of the callee
   2749 - for MemberExpr, the declaration of the referenced member
   2750 - for CXXConstructExpr, the declaration of the constructor
   2751 
   2752 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   2753 function. e.g. various subtypes of clang::Type and various expressions.
   2754 
   2755 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   2756   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   2757   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   2758   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   2759   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   2760   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   2761 </pre></td></tr>
   2762 
   2763 
   2764 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('throughUsingDecl0')"><a name="throughUsingDecl0Anchor">throughUsingDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt; InnerMatcher</td></tr>
   2765 <tr><td colspan="4" class="doc" id="throughUsingDecl0"><pre>Matches a DeclRefExpr that refers to a declaration through a
   2766 specific using shadow declaration.
   2767 
   2768 FIXME: This currently only works for functions. Fix.
   2769 
   2770 Given
   2771   namespace a { void f() {} }
   2772   using a::f;
   2773   void g() {
   2774     f();     Matches this ..
   2775     a::f();  .. but not this.
   2776   }
   2777 declRefExpr(throughUsingDeclaration(anything()))
   2778   matches f()
   2779 </pre></td></tr>
   2780 
   2781 
   2782 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('to0')"><a name="to0Anchor">to</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2783 <tr><td colspan="4" class="doc" id="to0"><pre>Matches a DeclRefExpr that refers to a declaration that matches the
   2784 specified matcher.
   2785 
   2786 Example matches x in if(x)
   2787     (matcher = declRefExpr(to(varDecl(hasName("x")))))
   2788   bool x;
   2789   if (x) {}
   2790 </pre></td></tr>
   2791 
   2792 
   2793 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('containsDeclaration0')"><a name="containsDeclaration0Anchor">containsDeclaration</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2794 <tr><td colspan="4" class="doc" id="containsDeclaration0"><pre>Matches the n'th declaration of a declaration statement.
   2795 
   2796 Note that this does not work for global declarations because the AST
   2797 breaks up multiple-declaration DeclStmt's into multiple single-declaration
   2798 DeclStmt's.
   2799 Example: Given non-global declarations
   2800   int a, b = 0;
   2801   int c;
   2802   int d = 2, e;
   2803 declStmt(containsDeclaration(
   2804       0, varDecl(hasInitializer(anything()))))
   2805   matches only 'int d = 2, e;', and
   2806 declStmt(containsDeclaration(1, varDecl()))
   2807   matches 'int a, b = 0' as well as 'int d = 2, e;'
   2808   but 'int c;' is not matched.
   2809 </pre></td></tr>
   2810 
   2811 
   2812 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('hasSingleDecl0')"><a name="hasSingleDecl0Anchor">hasSingleDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2813 <tr><td colspan="4" class="doc" id="hasSingleDecl0"><pre>Matches the Decl of a DeclStmt which has a single declaration.
   2814 
   2815 Given
   2816   int a, b;
   2817   int c;
   2818 declStmt(hasSingleDecl(anything()))
   2819   matches 'int c;' but not 'int a, b;'.
   2820 </pre></td></tr>
   2821 
   2822 
   2823 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>&gt;</td><td class="name" onclick="toggle('hasTypeLoc0')"><a name="hasTypeLoc0Anchor">hasTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; Inner</td></tr>
   2824 <tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of the declarator decl's type matches
   2825 the inner matcher.
   2826 
   2827 Given
   2828   int x;
   2829 declaratorDecl(hasTypeLoc(loc(asString("int"))))
   2830   matches int x
   2831 </pre></td></tr>
   2832 
   2833 
   2834 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('hasDeclContext0')"><a name="hasDeclContext0Anchor">hasDeclContext</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2835 <tr><td colspan="4" class="doc" id="hasDeclContext0"><pre>Matches declarations whose declaration context, interpreted as a
   2836 Decl, matches InnerMatcher.
   2837 
   2838 Given
   2839   namespace N {
   2840     namespace M {
   2841       class D {};
   2842     }
   2843   }
   2844 
   2845 recordDecl(hasDeclContext(namedDecl(hasName("M")))) matches the
   2846 declaration of class D.
   2847 </pre></td></tr>
   2848 
   2849 
   2850 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody0')"><a name="hasBody0Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   2851 <tr><td colspan="4" class="doc" id="hasBody0"><pre>Matches a 'for', 'while', or 'do while' statement that has
   2852 a given body.
   2853 
   2854 Given
   2855   for (;;) {}
   2856 hasBody(compoundStmt())
   2857   matches 'for (;;) {}'
   2858 with compoundStmt()
   2859   matching '{}'
   2860 </pre></td></tr>
   2861 
   2862 
   2863 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition3')"><a name="hasCondition3Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2864 <tr><td colspan="4" class="doc" id="hasCondition3"><pre>Matches the condition expression of an if statement, for loop,
   2865 or conditional operator.
   2866 
   2867 Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
   2868   if (true) {}
   2869 </pre></td></tr>
   2870 
   2871 
   2872 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;</td><td class="name" onclick="toggle('hasQualifier0')"><a name="hasQualifier0Anchor">hasQualifier</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
   2873 <tr><td colspan="4" class="doc" id="hasQualifier0"><pre>Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
   2874 matches InnerMatcher if the qualifier exists.
   2875 
   2876 Given
   2877   namespace N {
   2878     namespace M {
   2879       class D {};
   2880     }
   2881   }
   2882   N::M::D d;
   2883 
   2884 elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))
   2885 matches the type of the variable declaration of d.
   2886 </pre></td></tr>
   2887 
   2888 
   2889 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;</td><td class="name" onclick="toggle('namesType0')"><a name="namesType0Anchor">namesType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   2890 <tr><td colspan="4" class="doc" id="namesType0"><pre>Matches ElaboratedTypes whose named type matches InnerMatcher.
   2891 
   2892 Given
   2893   namespace N {
   2894     namespace M {
   2895       class D {};
   2896     }
   2897   }
   2898   N::M::D d;
   2899 
   2900 elaboratedType(namesType(recordType(
   2901 hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable
   2902 declaration of d.
   2903 </pre></td></tr>
   2904 
   2905 
   2906 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration10')"><a name="hasDeclaration10Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   2907 <tr><td colspan="4" class="doc" id="hasDeclaration10"><pre>Matches a node if the declaration associated with that node
   2908 matches the given matcher.
   2909 
   2910 The associated declaration is:
   2911 - for type nodes, the declaration of the underlying type
   2912 - for CallExpr, the declaration of the callee
   2913 - for MemberExpr, the declaration of the referenced member
   2914 - for CXXConstructExpr, the declaration of the constructor
   2915 
   2916 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   2917 function. e.g. various subtypes of clang::Type and various expressions.
   2918 
   2919 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   2920   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   2921   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   2922   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   2923   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   2924   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   2925 </pre></td></tr>
   2926 
   2927 
   2928 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>&gt;</td><td class="name" onclick="toggle('hasDestinationType0')"><a name="hasDestinationType0Anchor">hasDestinationType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   2929 <tr><td colspan="4" class="doc" id="hasDestinationType0"><pre>Matches casts whose destination type matches a given matcher.
   2930 
   2931 (Note: Clang's AST refers to other conversions as "casts" too, and calls
   2932 actual casts "explicit" casts.)
   2933 </pre></td></tr>
   2934 
   2935 
   2936 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('hasType2')"><a name="hasType2Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   2937 <tr><td colspan="4" class="doc" id="hasType2"><pre>Overloaded to match the declaration of the expression's or value
   2938 declaration's type.
   2939 
   2940 In case of a value declaration (for example a variable declaration),
   2941 this resolves one layer of indirection. For example, in the value
   2942 declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
   2943 while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
   2944 of x."
   2945 
   2946 Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
   2947             and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
   2948  class X {};
   2949  void y(X &amp;x) { x; X z; }
   2950 
   2951 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;
   2952 </pre></td></tr>
   2953 
   2954 
   2955 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('hasType0')"><a name="hasType0Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   2956 <tr><td colspan="4" class="doc" id="hasType0"><pre>Matches if the expression's or declaration's type matches a type
   2957 matcher.
   2958 
   2959 Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
   2960             and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
   2961  class X {};
   2962  void y(X &amp;x) { x; X z; }
   2963 </pre></td></tr>
   2964 
   2965 
   2966 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringImpCasts0')"><a name="ignoringImpCasts0Anchor">ignoringImpCasts</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2967 <tr><td colspan="4" class="doc" id="ignoringImpCasts0"><pre>Matches expressions that match InnerMatcher after any implicit casts
   2968 are stripped off.
   2969 
   2970 Parentheses and explicit casts are not discarded.
   2971 Given
   2972   int arr[5];
   2973   int a = 0;
   2974   char b = 0;
   2975   const int c = a;
   2976   int *d = arr;
   2977   long e = (long) 0l;
   2978 The matchers
   2979    varDecl(hasInitializer(ignoringImpCasts(integerLiteral())))
   2980    varDecl(hasInitializer(ignoringImpCasts(declRefExpr())))
   2981 would match the declarations for a, b, c, and d, but not e.
   2982 While
   2983    varDecl(hasInitializer(integerLiteral()))
   2984    varDecl(hasInitializer(declRefExpr()))
   2985 only match the declarations for b, c, and d.
   2986 </pre></td></tr>
   2987 
   2988 
   2989 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringParenCasts0')"><a name="ignoringParenCasts0Anchor">ignoringParenCasts</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   2990 <tr><td colspan="4" class="doc" id="ignoringParenCasts0"><pre>Matches expressions that match InnerMatcher after parentheses and
   2991 casts are stripped off.
   2992 
   2993 Implicit and non-C Style casts are also discarded.
   2994 Given
   2995   int a = 0;
   2996   char b = (0);
   2997   void* c = reinterpret_cast&lt;char*&gt;(0);
   2998   char d = char(0);
   2999 The matcher
   3000    varDecl(hasInitializer(ignoringParenCasts(integerLiteral())))
   3001 would match the declarations for a, b, c, and d.
   3002 while
   3003    varDecl(hasInitializer(integerLiteral()))
   3004 only match the declaration for a.
   3005 </pre></td></tr>
   3006 
   3007 
   3008 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringParenImpCasts0')"><a name="ignoringParenImpCasts0Anchor">ignoringParenImpCasts</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3009 <tr><td colspan="4" class="doc" id="ignoringParenImpCasts0"><pre>Matches expressions that match InnerMatcher after implicit casts and
   3010 parentheses are stripped off.
   3011 
   3012 Explicit casts are not discarded.
   3013 Given
   3014   int arr[5];
   3015   int a = 0;
   3016   char b = (0);
   3017   const int c = a;
   3018   int *d = (arr);
   3019   long e = ((long) 0l);
   3020 The matchers
   3021    varDecl(hasInitializer(ignoringParenImpCasts(integerLiteral())))
   3022    varDecl(hasInitializer(ignoringParenImpCasts(declRefExpr())))
   3023 would match the declarations for a, b, c, and d, but not e.
   3024 while
   3025    varDecl(hasInitializer(integerLiteral()))
   3026    varDecl(hasInitializer(declRefExpr()))
   3027 would only match the declaration for a.
   3028 </pre></td></tr>
   3029 
   3030 
   3031 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody1')"><a name="hasBody1Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   3032 <tr><td colspan="4" class="doc" id="hasBody1"><pre>Matches a 'for', 'while', or 'do while' statement that has
   3033 a given body.
   3034 
   3035 Given
   3036   for (;;) {}
   3037 hasBody(compoundStmt())
   3038   matches 'for (;;) {}'
   3039 with compoundStmt()
   3040   matching '{}'
   3041 </pre></td></tr>
   3042 
   3043 
   3044 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition1')"><a name="hasCondition1Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3045 <tr><td colspan="4" class="doc" id="hasCondition1"><pre>Matches the condition expression of an if statement, for loop,
   3046 or conditional operator.
   3047 
   3048 Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
   3049   if (true) {}
   3050 </pre></td></tr>
   3051 
   3052 
   3053 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasIncrement0')"><a name="hasIncrement0Anchor">hasIncrement</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   3054 <tr><td colspan="4" class="doc" id="hasIncrement0"><pre>Matches the increment statement of a for loop.
   3055 
   3056 Example:
   3057     forStmt(hasIncrement(unaryOperator(hasOperatorName("++"))))
   3058 matches '++x' in
   3059     for (x; x &lt; N; ++x) { }
   3060 </pre></td></tr>
   3061 
   3062 
   3063 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasLoopInit0')"><a name="hasLoopInit0Anchor">hasLoopInit</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   3064 <tr><td colspan="4" class="doc" id="hasLoopInit0"><pre>Matches the initialization statement of a for loop.
   3065 
   3066 Example:
   3067     forStmt(hasLoopInit(declStmt()))
   3068 matches 'int x = 0' in
   3069     for (int x = 0; x &lt; N; ++x) { }
   3070 </pre></td></tr>
   3071 
   3072 
   3073 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyParameter0')"><a name="hasAnyParameter0Anchor">hasAnyParameter</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; InnerMatcher</td></tr>
   3074 <tr><td colspan="4" class="doc" id="hasAnyParameter0"><pre>Matches any parameter of a function declaration.
   3075 
   3076 Does not match the 'this' parameter of a method.
   3077 
   3078 Given
   3079   class X { void f(int x, int y, int z) {} };
   3080 methodDecl(hasAnyParameter(hasName("y")))
   3081   matches f(int x, int y, int z) {}
   3082 with hasAnyParameter(...)
   3083   matching int y
   3084 </pre></td></tr>
   3085 
   3086 
   3087 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasParameter0')"><a name="hasParameter0Anchor">hasParameter</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; InnerMatcher</td></tr>
   3088 <tr><td colspan="4" class="doc" id="hasParameter0"><pre>Matches the n'th parameter of a function declaration.
   3089 
   3090 Given
   3091   class X { void f(int x) {} };
   3092 methodDecl(hasParameter(0, hasType(varDecl())))
   3093   matches f(int x) {}
   3094 with hasParameter(...)
   3095   matching int x
   3096 </pre></td></tr>
   3097 
   3098 
   3099 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('returns0')"><a name="returns0Anchor">returns</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3100 <tr><td colspan="4" class="doc" id="returns0"><pre>Matches the return type of a function declaration.
   3101 
   3102 Given:
   3103   class X { int f() { return 1; } };
   3104 methodDecl(returns(asString("int")))
   3105   matches int f() { return 1; }
   3106 </pre></td></tr>
   3107 
   3108 
   3109 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition0')"><a name="hasCondition0Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3110 <tr><td colspan="4" class="doc" id="hasCondition0"><pre>Matches the condition expression of an if statement, for loop,
   3111 or conditional operator.
   3112 
   3113 Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
   3114   if (true) {}
   3115 </pre></td></tr>
   3116 
   3117 
   3118 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasConditionVariableStatement0')"><a name="hasConditionVariableStatement0Anchor">hasConditionVariableStatement</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt; InnerMatcher</td></tr>
   3119 <tr><td colspan="4" class="doc" id="hasConditionVariableStatement0"><pre>Matches the condition variable statement in an if statement.
   3120 
   3121 Given
   3122   if (A* a = GetAPointer()) {}
   3123 hasConditionVariableStatement(...)
   3124   matches 'A* a = GetAPointer()'.
   3125 </pre></td></tr>
   3126 
   3127 
   3128 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasElse0')"><a name="hasElse0Anchor">hasElse</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   3129 <tr><td colspan="4" class="doc" id="hasElse0"><pre>Matches the else-statement of an if statement.
   3130 
   3131 Examples matches the if statement
   3132   (matcher = ifStmt(hasElse(boolLiteral(equals(true)))))
   3133   if (false) false; else true;
   3134 </pre></td></tr>
   3135 
   3136 
   3137 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasThen0')"><a name="hasThen0Anchor">hasThen</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   3138 <tr><td colspan="4" class="doc" id="hasThen0"><pre>Matches the then-statement of an if statement.
   3139 
   3140 Examples matches the if statement
   3141   (matcher = ifStmt(hasThen(boolLiteral(equals(true)))))
   3142   if (false) true; else false;
   3143 </pre></td></tr>
   3144 
   3145 
   3146 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a>&gt;</td><td class="name" onclick="toggle('hasImplicitDestinationType0')"><a name="hasImplicitDestinationType0Anchor">hasImplicitDestinationType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3147 <tr><td colspan="4" class="doc" id="hasImplicitDestinationType0"><pre>Matches implicit casts whose destination type matches a given
   3148 matcher.
   3149 
   3150 FIXME: Unit test this matcher
   3151 </pre></td></tr>
   3152 
   3153 
   3154 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration9')"><a name="hasDeclaration9Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3155 <tr><td colspan="4" class="doc" id="hasDeclaration9"><pre>Matches a node if the declaration associated with that node
   3156 matches the given matcher.
   3157 
   3158 The associated declaration is:
   3159 - for type nodes, the declaration of the underlying type
   3160 - for CallExpr, the declaration of the callee
   3161 - for MemberExpr, the declaration of the referenced member
   3162 - for CXXConstructExpr, the declaration of the constructor
   3163 
   3164 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3165 function. e.g. various subtypes of clang::Type and various expressions.
   3166 
   3167 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3168   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3169   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3170   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3171   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3172   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3173 </pre></td></tr>
   3174 
   3175 
   3176 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration8')"><a name="hasDeclaration8Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3177 <tr><td colspan="4" class="doc" id="hasDeclaration8"><pre>Matches a node if the declaration associated with that node
   3178 matches the given matcher.
   3179 
   3180 The associated declaration is:
   3181 - for type nodes, the declaration of the underlying type
   3182 - for CallExpr, the declaration of the callee
   3183 - for MemberExpr, the declaration of the referenced member
   3184 - for CXXConstructExpr, the declaration of the constructor
   3185 
   3186 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3187 function. e.g. various subtypes of clang::Type and various expressions.
   3188 
   3189 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3190   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3191   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3192   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3193   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3194   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3195 </pre></td></tr>
   3196 
   3197 
   3198 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration7')"><a name="hasDeclaration7Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3199 <tr><td colspan="4" class="doc" id="hasDeclaration7"><pre>Matches a node if the declaration associated with that node
   3200 matches the given matcher.
   3201 
   3202 The associated declaration is:
   3203 - for type nodes, the declaration of the underlying type
   3204 - for CallExpr, the declaration of the callee
   3205 - for MemberExpr, the declaration of the referenced member
   3206 - for CXXConstructExpr, the declaration of the constructor
   3207 
   3208 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3209 function. e.g. various subtypes of clang::Type and various expressions.
   3210 
   3211 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3212   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3213   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3214   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3215   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3216   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3217 </pre></td></tr>
   3218 
   3219 
   3220 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('hasObjectExpression0')"><a name="hasObjectExpression0Anchor">hasObjectExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3221 <tr><td colspan="4" class="doc" id="hasObjectExpression0"><pre>Matches a member expression where the object expression is
   3222 matched by a given matcher.
   3223 
   3224 Given
   3225   struct X { int m; };
   3226   void f(X x) { x.m; m; }
   3227 memberExpr(hasObjectExpression(hasType(recordDecl(hasName("X")))))))
   3228   matches "x.m" and "m"
   3229 with hasObjectExpression(...)
   3230   matching "x" and the implicit object expression of "m" which has type X*.
   3231 </pre></td></tr>
   3232 
   3233 
   3234 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('member0')"><a name="member0Anchor">member</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt; InnerMatcher</td></tr>
   3235 <tr><td colspan="4" class="doc" id="member0"><pre>Matches a member expression where the member is matched by a
   3236 given matcher.
   3237 
   3238 Given
   3239   struct { int first, second; } first, second;
   3240   int i(second.first);
   3241   int j(first.second);
   3242 memberExpr(member(hasName("first")))
   3243   matches second.first
   3244   but not first.second (because the member name there is "second").
   3245 </pre></td></tr>
   3246 
   3247 
   3248 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerTypeLoc.html">MemberPointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc1')"><a name="pointeeLoc1Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   3249 <tr><td colspan="4" class="doc" id="pointeeLoc1"><pre>Narrows PointerType (and similar) matchers to those where the
   3250 pointee matches a given matcher.
   3251 
   3252 Given
   3253   int *a;
   3254   int const *b;
   3255   float const *f;
   3256 pointerType(pointee(isConstQualified(), isInteger()))
   3257   matches "int const *b"
   3258 
   3259 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   3260   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   3261 </pre></td></tr>
   3262 
   3263 
   3264 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;</td><td class="name" onclick="toggle('pointee1')"><a name="pointee1Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   3265 <tr><td colspan="4" class="doc" id="pointee1"><pre>Narrows PointerType (and similar) matchers to those where the
   3266 pointee matches a given matcher.
   3267 
   3268 Given
   3269   int *a;
   3270   int const *b;
   3271   float const *f;
   3272 pointerType(pointee(isConstQualified(), isInteger()))
   3273   matches "int const *b"
   3274 
   3275 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   3276   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   3277 </pre></td></tr>
   3278 
   3279 
   3280 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('hasPrefix1')"><a name="hasPrefix1Anchor">hasPrefix</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt; InnerMatcher</td></tr>
   3281 <tr><td colspan="4" class="doc" id="hasPrefix1"><pre>Matches on the prefix of a NestedNameSpecifierLoc.
   3282 
   3283 Given
   3284   struct A { struct B { struct C {}; }; };
   3285   A::B::C c;
   3286 nestedNameSpecifierLoc(hasPrefix(loc(specifiesType(asString("struct A")))))
   3287   matches "A::"
   3288 </pre></td></tr>
   3289 
   3290 
   3291 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('specifiesTypeLoc0')"><a name="specifiesTypeLoc0Anchor">specifiesTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; InnerMatcher</td></tr>
   3292 <tr><td colspan="4" class="doc" id="specifiesTypeLoc0"><pre>Matches nested name specifier locs that specify a type matching the
   3293 given TypeLoc.
   3294 
   3295 Given
   3296   struct A { struct B { struct C {}; }; };
   3297   A::B::C c;
   3298 nestedNameSpecifierLoc(specifiesTypeLoc(loc(type(
   3299   hasDeclaration(recordDecl(hasName("A")))))))
   3300   matches "A::"
   3301 </pre></td></tr>
   3302 
   3303 
   3304 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('hasPrefix0')"><a name="hasPrefix0Anchor">hasPrefix</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
   3305 <tr><td colspan="4" class="doc" id="hasPrefix0"><pre>Matches on the prefix of a NestedNameSpecifier.
   3306 
   3307 Given
   3308   struct A { struct B { struct C {}; }; };
   3309   A::B::C c;
   3310 nestedNameSpecifier(hasPrefix(specifiesType(asString("struct A")))) and
   3311   matches "A::"
   3312 </pre></td></tr>
   3313 
   3314 
   3315 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('specifiesNamespace0')"><a name="specifiesNamespace0Anchor">specifiesNamespace</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt; InnerMatcher</td></tr>
   3316 <tr><td colspan="4" class="doc" id="specifiesNamespace0"><pre>Matches nested name specifiers that specify a namespace matching the
   3317 given namespace matcher.
   3318 
   3319 Given
   3320   namespace ns { struct A {}; }
   3321   ns::A a;
   3322 nestedNameSpecifier(specifiesNamespace(hasName("ns")))
   3323   matches "ns::"
   3324 </pre></td></tr>
   3325 
   3326 
   3327 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('specifiesType0')"><a name="specifiesType0Anchor">specifiesType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3328 <tr><td colspan="4" class="doc" id="specifiesType0"><pre>Matches nested name specifiers that specify a type matching the
   3329 given QualType matcher without qualifiers.
   3330 
   3331 Given
   3332   struct A { struct B { struct C {}; }; };
   3333   A::B::C c;
   3334 nestedNameSpecifier(specifiesType(hasDeclaration(recordDecl(hasName("A")))))
   3335   matches "A::"
   3336 </pre></td></tr>
   3337 
   3338 
   3339 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;</td><td class="name" onclick="toggle('innerType0')"><a name="innerType0Anchor">innerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   3340 <tr><td colspan="4" class="doc" id="innerType0"><pre>Matches ParenType nodes where the inner type is a specific type.
   3341 
   3342 Given
   3343   int (*ptr_to_array)[4];
   3344   int (*ptr_to_func)(int);
   3345 
   3346 varDecl(hasType(pointsTo(parenType(innerType(functionType()))))) matches
   3347 ptr_to_func but not ptr_to_array.
   3348 
   3349 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;
   3350 </pre></td></tr>
   3351 
   3352 
   3353 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerTypeLoc.html">PointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc2')"><a name="pointeeLoc2Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   3354 <tr><td colspan="4" class="doc" id="pointeeLoc2"><pre>Narrows PointerType (and similar) matchers to those where the
   3355 pointee matches a given matcher.
   3356 
   3357 Given
   3358   int *a;
   3359   int const *b;
   3360   float const *f;
   3361 pointerType(pointee(isConstQualified(), isInteger()))
   3362   matches "int const *b"
   3363 
   3364 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   3365   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   3366 </pre></td></tr>
   3367 
   3368 
   3369 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;</td><td class="name" onclick="toggle('pointee2')"><a name="pointee2Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   3370 <tr><td colspan="4" class="doc" id="pointee2"><pre>Narrows PointerType (and similar) matchers to those where the
   3371 pointee matches a given matcher.
   3372 
   3373 Given
   3374   int *a;
   3375   int const *b;
   3376   float const *f;
   3377 pointerType(pointee(isConstQualified(), isInteger()))
   3378   matches "int const *b"
   3379 
   3380 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   3381   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   3382 </pre></td></tr>
   3383 
   3384 
   3385 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasCanonicalType0')"><a name="hasCanonicalType0Anchor">hasCanonicalType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3386 <tr><td colspan="4" class="doc" id="hasCanonicalType0"><pre>Matches QualTypes whose canonical type matches InnerMatcher.
   3387 
   3388 Given:
   3389   typedef int &amp;int_ref;
   3390   int a;
   3391   int_ref b = a;
   3392 
   3393 varDecl(hasType(qualType(referenceType()))))) will not match the
   3394 declaration of b but varDecl(hasType(qualType(hasCanonicalType(referenceType())))))) does.
   3395 </pre></td></tr>
   3396 
   3397 
   3398 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration6')"><a name="hasDeclaration6Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3399 <tr><td colspan="4" class="doc" id="hasDeclaration6"><pre>Matches a node if the declaration associated with that node
   3400 matches the given matcher.
   3401 
   3402 The associated declaration is:
   3403 - for type nodes, the declaration of the underlying type
   3404 - for CallExpr, the declaration of the callee
   3405 - for MemberExpr, the declaration of the referenced member
   3406 - for CXXConstructExpr, the declaration of the constructor
   3407 
   3408 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3409 function. e.g. various subtypes of clang::Type and various expressions.
   3410 
   3411 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3412   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3413   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3414   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3415   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3416   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3417 </pre></td></tr>
   3418 
   3419 
   3420 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('pointsTo1')"><a name="pointsTo1Anchor">pointsTo</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   3421 <tr><td colspan="4" class="doc" id="pointsTo1"><pre>Overloaded to match the pointee type's declaration.
   3422 </pre></td></tr>
   3423 
   3424 
   3425 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('pointsTo0')"><a name="pointsTo0Anchor">pointsTo</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3426 <tr><td colspan="4" class="doc" id="pointsTo0"><pre>Matches if the matched type is a pointer type and the pointee type
   3427 matches the specified matcher.
   3428 
   3429 Example matches y-&gt;x()
   3430     (matcher = callExpr(on(hasType(pointsTo(recordDecl(hasName("Y")))))))
   3431   class Y { public: void x(); };
   3432   void z() { Y *y; y-&gt;x(); }
   3433 </pre></td></tr>
   3434 
   3435 
   3436 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('references1')"><a name="references1Anchor">references</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   3437 <tr><td colspan="4" class="doc" id="references1"><pre>Overloaded to match the referenced type's declaration.
   3438 </pre></td></tr>
   3439 
   3440 
   3441 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('references0')"><a name="references0Anchor">references</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3442 <tr><td colspan="4" class="doc" id="references0"><pre>Matches if the matched type is a reference type and the referenced
   3443 type matches the specified matcher.
   3444 
   3445 Example matches X &amp;x and const X &amp;y
   3446     (matcher = varDecl(hasType(references(recordDecl(hasName("X"))))))
   3447   class X {
   3448     void a(X b) {
   3449       X &amp;x = b;
   3450       const X &amp;y = b;
   3451   };
   3452 </pre></td></tr>
   3453 
   3454 
   3455 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration5')"><a name="hasDeclaration5Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3456 <tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a node if the declaration associated with that node
   3457 matches the given matcher.
   3458 
   3459 The associated declaration is:
   3460 - for type nodes, the declaration of the underlying type
   3461 - for CallExpr, the declaration of the callee
   3462 - for MemberExpr, the declaration of the referenced member
   3463 - for CXXConstructExpr, the declaration of the constructor
   3464 
   3465 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3466 function. e.g. various subtypes of clang::Type and various expressions.
   3467 
   3468 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3469   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3470   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3471   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3472   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3473   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3474 </pre></td></tr>
   3475 
   3476 
   3477 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceTypeLoc.html">ReferenceTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc3')"><a name="pointeeLoc3Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
   3478 <tr><td colspan="4" class="doc" id="pointeeLoc3"><pre>Narrows PointerType (and similar) matchers to those where the
   3479 pointee matches a given matcher.
   3480 
   3481 Given
   3482   int *a;
   3483   int const *b;
   3484   float const *f;
   3485 pointerType(pointee(isConstQualified(), isInteger()))
   3486   matches "int const *b"
   3487 
   3488 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   3489   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   3490 </pre></td></tr>
   3491 
   3492 
   3493 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;</td><td class="name" onclick="toggle('pointee3')"><a name="pointee3Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
   3494 <tr><td colspan="4" class="doc" id="pointee3"><pre>Narrows PointerType (and similar) matchers to those where the
   3495 pointee matches a given matcher.
   3496 
   3497 Given
   3498   int *a;
   3499   int const *b;
   3500   float const *f;
   3501 pointerType(pointee(isConstQualified(), isInteger()))
   3502   matches "int const *b"
   3503 
   3504 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
   3505   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
   3506 </pre></td></tr>
   3507 
   3508 
   3509 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('alignOfExpr0')"><a name="alignOfExpr0Anchor">alignOfExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;  InnerMatcher</td></tr>
   3510 <tr><td colspan="4" class="doc" id="alignOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
   3511 alignof.
   3512 </pre></td></tr>
   3513 
   3514 
   3515 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('sizeOfExpr0')"><a name="sizeOfExpr0Anchor">sizeOfExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;  InnerMatcher</td></tr>
   3516 <tr><td colspan="4" class="doc" id="sizeOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
   3517 sizeof.
   3518 </pre></td></tr>
   3519 
   3520 
   3521 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;</td><td class="name" onclick="toggle('forEachSwitchCase0')"><a name="forEachSwitchCase0Anchor">forEachSwitchCase</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchCase.html">SwitchCase</a>&gt; InnerMatcher</td></tr>
   3522 <tr><td colspan="4" class="doc" id="forEachSwitchCase0"><pre>Matches each case or default statement belonging to the given switch
   3523 statement. This matcher may produce multiple matches.
   3524 
   3525 Given
   3526   switch (1) { case 1: case 2: default: switch (2) { case 3: case 4: ; } }
   3527 switchStmt(forEachSwitchCase(caseStmt().bind("c"))).bind("s")
   3528   matches four times, with "c" binding each of "case 1:", "case 2:",
   3529 "case 3:" and "case 4:", and "s" respectively binding "switch (1)",
   3530 "switch (1)", "switch (2)" and "switch (2)".
   3531 </pre></td></tr>
   3532 
   3533 
   3534 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration4')"><a name="hasDeclaration4Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3535 <tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a node if the declaration associated with that node
   3536 matches the given matcher.
   3537 
   3538 The associated declaration is:
   3539 - for type nodes, the declaration of the underlying type
   3540 - for CallExpr, the declaration of the callee
   3541 - for MemberExpr, the declaration of the referenced member
   3542 - for CXXConstructExpr, the declaration of the constructor
   3543 
   3544 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3545 function. e.g. various subtypes of clang::Type and various expressions.
   3546 
   3547 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3548   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3549   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3550   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3551   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3552   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3553 </pre></td></tr>
   3554 
   3555 
   3556 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('isExpr0')"><a name="isExpr0Anchor">isExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3557 <tr><td colspan="4" class="doc" id="isExpr0"><pre>Matches a sugar TemplateArgument that refers to a certain expression.
   3558 
   3559 Given
   3560   template&lt;typename T&gt; struct A {};
   3561   struct B { B* next; };
   3562   A&lt;&amp;B::next&gt; a;
   3563 templateSpecializationType(hasAnyTemplateArgument(
   3564   isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next"))))))))
   3565   matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
   3566     B::next
   3567 </pre></td></tr>
   3568 
   3569 
   3570 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToDeclaration0')"><a name="refersToDeclaration0Anchor">refersToDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   3571 <tr><td colspan="4" class="doc" id="refersToDeclaration0"><pre>Matches a canonical TemplateArgument that refers to a certain
   3572 declaration.
   3573 
   3574 Given
   3575   template&lt;typename T&gt; struct A {};
   3576   struct B { B* next; };
   3577   A&lt;&amp;B::next&gt; a;
   3578 classTemplateSpecializationDecl(hasAnyTemplateArgument(
   3579     refersToDeclaration(fieldDecl(hasName("next"))))
   3580   matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
   3581     B::next
   3582 </pre></td></tr>
   3583 
   3584 
   3585 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToType0')"><a name="refersToType0Anchor">refersToType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3586 <tr><td colspan="4" class="doc" id="refersToType0"><pre>Matches a TemplateArgument that refers to a certain type.
   3587 
   3588 Given
   3589   struct X {};
   3590   template&lt;typename T&gt; struct A {};
   3591   A&lt;X&gt; a;
   3592 classTemplateSpecializationDecl(hasAnyTemplateArgument(
   3593     refersToType(class(hasName("X")))))
   3594   matches the specialization A&lt;X&gt;
   3595 </pre></td></tr>
   3596 
   3597 
   3598 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument1')"><a name="hasAnyTemplateArgument1Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
   3599 <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations that have at least one
   3600 TemplateArgument matching the given InnerMatcher.
   3601 
   3602 Given
   3603   template&lt;typename T&gt; class A {};
   3604   template&lt;&gt; class A&lt;double&gt; {};
   3605   A&lt;int&gt; a;
   3606 classTemplateSpecializationDecl(hasAnyTemplateArgument(
   3607     refersToType(asString("int"))))
   3608   matches the specialization A&lt;int&gt;
   3609 </pre></td></tr>
   3610 
   3611 
   3612 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration3')"><a name="hasDeclaration3Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3613 <tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a node if the declaration associated with that node
   3614 matches the given matcher.
   3615 
   3616 The associated declaration is:
   3617 - for type nodes, the declaration of the underlying type
   3618 - for CallExpr, the declaration of the callee
   3619 - for MemberExpr, the declaration of the referenced member
   3620 - for CXXConstructExpr, the declaration of the constructor
   3621 
   3622 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3623 function. e.g. various subtypes of clang::Type and various expressions.
   3624 
   3625 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3626   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3627   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3628   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3629   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3630   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3631 </pre></td></tr>
   3632 
   3633 
   3634 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument1')"><a name="hasTemplateArgument1Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
   3635 <tr><td colspan="4" class="doc" id="hasTemplateArgument1"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
   3636 matches the given InnerMatcher.
   3637 
   3638 Given
   3639   template&lt;typename T, typename U&gt; class A {};
   3640   A&lt;bool, int&gt; b;
   3641   A&lt;int, bool&gt; c;
   3642 classTemplateSpecializationDecl(hasTemplateArgument(
   3643     1, refersToType(asString("int"))))
   3644   matches the specialization A&lt;bool, int&gt;
   3645 </pre></td></tr>
   3646 
   3647 
   3648 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration2')"><a name="hasDeclaration2Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3649 <tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a node if the declaration associated with that node
   3650 matches the given matcher.
   3651 
   3652 The associated declaration is:
   3653 - for type nodes, the declaration of the underlying type
   3654 - for CallExpr, the declaration of the callee
   3655 - for MemberExpr, the declaration of the referenced member
   3656 - for CXXConstructExpr, the declaration of the constructor
   3657 
   3658 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3659 function. e.g. various subtypes of clang::Type and various expressions.
   3660 
   3661 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3662   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3663   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3664   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3665   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3666   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3667 </pre></td></tr>
   3668 
   3669 
   3670 <tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('findAll0')"><a name="findAll0Anchor">findAll</a></td><td>Matcher&lt;T&gt;  Matcher</td></tr>
   3671 <tr><td colspan="4" class="doc" id="findAll0"><pre>Matches if the node or any descendant matches.
   3672 
   3673 Generates results for each match.
   3674 
   3675 For example, in:
   3676   class A { class B {}; class C {}; };
   3677 The matcher:
   3678   recordDecl(hasName("::A"), findAll(recordDecl(isDefinition()).bind("m")))
   3679 will generate results for A, B and C.
   3680 
   3681 Usable as: Any Matcher
   3682 </pre></td></tr>
   3683 
   3684 
   3685 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration1')"><a name="hasDeclaration1Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3686 <tr><td colspan="4" class="doc" id="hasDeclaration1"><pre>Matches a node if the declaration associated with that node
   3687 matches the given matcher.
   3688 
   3689 The associated declaration is:
   3690 - for type nodes, the declaration of the underlying type
   3691 - for CallExpr, the declaration of the callee
   3692 - for MemberExpr, the declaration of the referenced member
   3693 - for CXXConstructExpr, the declaration of the constructor
   3694 
   3695 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3696 function. e.g. various subtypes of clang::Type and various expressions.
   3697 
   3698 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3699   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3700   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3701   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3702   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3703   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3704 </pre></td></tr>
   3705 
   3706 
   3707 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgumentOfType0')"><a name="hasArgumentOfType0Anchor">hasArgumentOfType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3708 <tr><td colspan="4" class="doc" id="hasArgumentOfType0"><pre>Matches unary expressions that have a specific type of argument.
   3709 
   3710 Given
   3711   int a, c; float b; int s = sizeof(a) + sizeof(b) + alignof(c);
   3712 unaryExprOrTypeTraitExpr(hasArgumentOfType(asString("int"))
   3713   matches sizeof(a) and alignof(c)
   3714 </pre></td></tr>
   3715 
   3716 
   3717 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasUnaryOperand0')"><a name="hasUnaryOperand0Anchor">hasUnaryOperand</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3718 <tr><td colspan="4" class="doc" id="hasUnaryOperand0"><pre>Matches if the operand of a unary operator matches.
   3719 
   3720 Example matches true (matcher = hasUnaryOperand(boolLiteral(equals(true))))
   3721   !true
   3722 </pre></td></tr>
   3723 
   3724 
   3725 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration0')"><a name="hasDeclaration0Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;  InnerMatcher</td></tr>
   3726 <tr><td colspan="4" class="doc" id="hasDeclaration0"><pre>Matches a node if the declaration associated with that node
   3727 matches the given matcher.
   3728 
   3729 The associated declaration is:
   3730 - for type nodes, the declaration of the underlying type
   3731 - for CallExpr, the declaration of the callee
   3732 - for MemberExpr, the declaration of the referenced member
   3733 - for CXXConstructExpr, the declaration of the constructor
   3734 
   3735 Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
   3736 function. e.g. various subtypes of clang::Type and various expressions.
   3737 
   3738 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
   3739   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
   3740   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
   3741   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
   3742   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
   3743   Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
   3744 </pre></td></tr>
   3745 
   3746 
   3747 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDecl.html">UsingDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyUsingShadowDecl0')"><a name="hasAnyUsingShadowDecl0Anchor">hasAnyUsingShadowDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt; InnerMatcher</td></tr>
   3748 <tr><td colspan="4" class="doc" id="hasAnyUsingShadowDecl0"><pre>Matches any using shadow declaration.
   3749 
   3750 Given
   3751   namespace X { void b(); }
   3752   using X::b;
   3753 usingDecl(hasAnyUsingShadowDecl(hasName("b"))))
   3754   matches using X::b </pre></td></tr>
   3755 
   3756 
   3757 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt;</td><td class="name" onclick="toggle('hasTargetDecl0')"><a name="hasTargetDecl0Anchor">hasTargetDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; InnerMatcher</td></tr>
   3758 <tr><td colspan="4" class="doc" id="hasTargetDecl0"><pre>Matches a using shadow declaration where the target declaration is
   3759 matched by the given matcher.
   3760 
   3761 Given
   3762   namespace X { int a; void b(); }
   3763   using X::a;
   3764   using X::b;
   3765 usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(functionDecl())))
   3766   matches using X::b but not using X::a </pre></td></tr>
   3767 
   3768 
   3769 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;</td><td class="name" onclick="toggle('hasType3')"><a name="hasType3Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
   3770 <tr><td colspan="4" class="doc" id="hasType3"><pre>Overloaded to match the declaration of the expression's or value
   3771 declaration's type.
   3772 
   3773 In case of a value declaration (for example a variable declaration),
   3774 this resolves one layer of indirection. For example, in the value
   3775 declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
   3776 while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
   3777 of x."
   3778 
   3779 Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
   3780             and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
   3781  class X {};
   3782  void y(X &amp;x) { x; X z; }
   3783 
   3784 Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;
   3785 </pre></td></tr>
   3786 
   3787 
   3788 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;</td><td class="name" onclick="toggle('hasType1')"><a name="hasType1Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3789 <tr><td colspan="4" class="doc" id="hasType1"><pre>Matches if the expression's or declaration's type matches a type
   3790 matcher.
   3791 
   3792 Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
   3793             and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
   3794  class X {};
   3795  void y(X &amp;x) { x; X z; }
   3796 </pre></td></tr>
   3797 
   3798 
   3799 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasInitializer0')"><a name="hasInitializer0Anchor">hasInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3800 <tr><td colspan="4" class="doc" id="hasInitializer0"><pre>Matches a variable declaration that has an initializer expression
   3801 that matches the given matcher.
   3802 
   3803 Example matches x (matcher = varDecl(hasInitializer(callExpr())))
   3804   bool y() { return true; }
   3805   bool x = y();
   3806 </pre></td></tr>
   3807 
   3808 
   3809 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VariableArrayType.html">VariableArrayType</a>&gt;</td><td class="name" onclick="toggle('hasSizeExpr0')"><a name="hasSizeExpr0Anchor">hasSizeExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3810 <tr><td colspan="4" class="doc" id="hasSizeExpr0"><pre>Matches VariableArrayType nodes that have a specific size
   3811 expression.
   3812 
   3813 Given
   3814   void f(int b) {
   3815     int a[b];
   3816   }
   3817 variableArrayType(hasSizeExpr(ignoringImpCasts(declRefExpr(to(
   3818   varDecl(hasName("b")))))))
   3819   matches "int a[b]"
   3820 </pre></td></tr>
   3821 
   3822 
   3823 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody2')"><a name="hasBody2Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
   3824 <tr><td colspan="4" class="doc" id="hasBody2"><pre>Matches a 'for', 'while', or 'do while' statement that has
   3825 a given body.
   3826 
   3827 Given
   3828   for (;;) {}
   3829 hasBody(compoundStmt())
   3830   matches 'for (;;) {}'
   3831 with compoundStmt()
   3832   matching '{}'
   3833 </pre></td></tr>
   3834 
   3835 
   3836 <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition2')"><a name="hasCondition2Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
   3837 <tr><td colspan="4" class="doc" id="hasCondition2"><pre>Matches the condition expression of an if statement, for loop,
   3838 or conditional operator.
   3839 
   3840 Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
   3841   if (true) {}
   3842 </pre></td></tr>
   3843 
   3844 
   3845 <tr><td>Matcher&lt;internal::BindableMatcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc1')"><a name="loc1Anchor">loc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
   3846 <tr><td colspan="4" class="doc" id="loc1"><pre>Matches NestedNameSpecifierLocs for which the given inner
   3847 NestedNameSpecifier-matcher matches.
   3848 </pre></td></tr>
   3849 
   3850 
   3851 <tr><td>Matcher&lt;internal::BindableMatcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
   3852 <tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
   3853 QualType-matcher matches.
   3854 </pre></td></tr>
   3855 
   3856 <!--END_TRAVERSAL_MATCHERS -->
   3857 </table>
   3858 
   3859 </div>
   3860 </body>
   3861 </html>
   3862 
   3863 
   3864