@@ -7391,6 +7391,32 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
7391
7391
</pre></td></tr>
7392
7392
7393
7393
7394
+ <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>></td><td class="name" onclick="toggle('forEachTemplateArgument0')"><a name="forEachTemplateArgument0Anchor">forEachTemplateArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
7395
+ <tr><td colspan="4" class="doc" id="forEachTemplateArgument0"><pre>Matches classTemplateSpecialization, templateSpecializationType and functionDecl nodes where the template argument matches the inner matcher.
7396
+ This matcher may produce multiple matches.
7397
+
7398
+ Given
7399
+ template <typename T, unsigned N, unsigned M>
7400
+ struct Matrix {};
7401
+
7402
+ constexpr unsigned R = 2;
7403
+ Matrix<int, R * 2, R * 4> M;
7404
+
7405
+ template <typename T, typename U>
7406
+ void f(T&& t, U&& u) {}
7407
+
7408
+ bool B = false;
7409
+ f(R, B);
7410
+
7411
+ templateSpecializationType(forEachTemplateArgument(isExpr(expr())))
7412
+ matches twice, with expr() matching 'R * 2' and 'R * 4'
7413
+
7414
+ functionDecl(forEachTemplateArgument(refersToType(builtinType())))
7415
+ matches the specialization f<unsigned, bool> twice, for 'unsigned'
7416
+ and 'bool'
7417
+ </pre></td></tr>
7418
+
7419
+
7394
7420
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>></td><td class="name" onclick="toggle('hasAnyTemplateArgument0')"><a name="hasAnyTemplateArgument0Anchor">hasAnyTemplateArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
7395
7421
<tr><td colspan="4" class="doc" id="hasAnyTemplateArgument0"><pre>Matches classTemplateSpecializations, templateSpecializationType and
7396
7422
functionDecl that have at least one TemplateArgument matching the given
@@ -8181,6 +8207,32 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
8181
8207
</pre></td></tr>
8182
8208
8183
8209
8210
+ <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>></td><td class="name" onclick="toggle('forEachTemplateArgument1')"><a name="forEachTemplateArgument1Anchor">forEachTemplateArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
8211
+ <tr><td colspan="4" class="doc" id="forEachTemplateArgument1"><pre>Matches classTemplateSpecialization, templateSpecializationType and functionDecl nodes where the template argument matches the inner matcher.
8212
+ This matcher may produce multiple matches.
8213
+
8214
+ Given
8215
+ template <typename T, unsigned N, unsigned M>
8216
+ struct Matrix {};
8217
+
8218
+ constexpr unsigned R = 2;
8219
+ Matrix<int, R * 2, R * 4> M;
8220
+
8221
+ template <typename T, typename U>
8222
+ void f(T&& t, U&& u) {}
8223
+
8224
+ bool B = false;
8225
+ f(R, B);
8226
+
8227
+ templateSpecializationType(forEachTemplateArgument(isExpr(expr())))
8228
+ matches twice, with expr() matching 'R * 2' and 'R * 4'
8229
+
8230
+ functionDecl(forEachTemplateArgument(refersToType(builtinType())))
8231
+ matches the specialization f<unsigned, bool> twice, for 'unsigned'
8232
+ and 'bool'
8233
+ </pre></td></tr>
8234
+
8235
+
8184
8236
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>></td><td class="name" onclick="toggle('hasAnyTemplateArgument2')"><a name="hasAnyTemplateArgument2Anchor">hasAnyTemplateArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
8185
8237
<tr><td colspan="4" class="doc" id="hasAnyTemplateArgument2"><pre>Matches classTemplateSpecializations, templateSpecializationType and
8186
8238
functionDecl that have at least one TemplateArgument matching the given
@@ -9405,6 +9457,33 @@ <h2 id="traversal-matchers">AST Traversal Matchers</h2>
9405
9457
</pre></td></tr>
9406
9458
9407
9459
9460
+ <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('forEachTemplateArgument2')"><a name="forEachTemplateArgument2Anchor">forEachTemplateArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
9461
+ <tr><td colspan="4" class="doc" id="forEachTemplateArgument2"><pre>Matches classTemplateSpecialization, templateSpecializationType and functionDecl nodes where the template argument matches the inner matcher.
9462
+ This matcher may produce multiple matches.
9463
+
9464
+
9465
+ Given
9466
+ template <typename T, unsigned N, unsigned M>
9467
+ struct Matrix {};
9468
+
9469
+ constexpr unsigned R = 2;
9470
+ Matrix<int, R * 2, R * 4> M;
9471
+
9472
+ template <typename T, typename U>
9473
+ void f(T&& t, U&& u) {}
9474
+
9475
+ bool B = false;
9476
+ f(R, B);
9477
+
9478
+ templateSpecializationType(forEachTemplateArgument(isExpr(expr())))
9479
+ matches twice, with expr() matching 'R * 2' and 'R * 4'
9480
+
9481
+ functionDecl(forEachTemplateArgument(refersToType(builtinType())))
9482
+ matches the specialization f<unsigned, bool> twice, for 'unsigned'
9483
+ and 'bool'
9484
+ </pre></td></tr>
9485
+
9486
+
9408
9487
<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>></td><td class="name" onclick="toggle('hasAnyTemplateArgument1')"><a name="hasAnyTemplateArgument1Anchor">hasAnyTemplateArgument</a></td><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>> InnerMatcher</td></tr>
9409
9488
<tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations, templateSpecializationType and
9410
9489
functionDecl that have at least one TemplateArgument matching the given
0 commit comments