<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60469>60469</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            RecursiveASTVisitor is missing VisitConceptReference and VisitTypeConstraint methods
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          HighCommander4
      </td>
    </tr>
</table>

<pre>
    [`TypeConstraint`](https://github.com/llvm/llvm-project/blob/0e2400ae025d33dd3dbe9f9da52ab2da776e92fd/clang/include/clang/AST/ASTConcept.h#L180) and [`ConceptSpecializationExpr`](https://github.com/llvm/llvm-project/blob/0e2400ae025d33dd3dbe9f9da52ab2da776e92fd/clang/include/clang/AST/ExprConcepts.h#L41) both inherit from [`ConceptReference`](https://github.com/llvm/llvm-project/blob/0e2400ae025d33dd3dbe9f9da52ab2da776e92fd/clang/include/clang/AST/ASTConcept.h#L112), but `RecursiveASTVisitor` only has a `VisitConceptSpecializationExpr` method but not `VisitTypeConstraint` or `VisitConceptReference`.

As a result, code that wants to visit both type constraints and concept-specialization-exprs, or just type constraints, needs to override `TraverseTypeConstraint`, which is a bit clunky.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVE1v5CgQ_TX4gmLRhT8PPvR21trDnpLW3jFU22QxWIA76fn1I9yZTDIdjTS3XLDkglfv8R4lQtCjRexI-Rcp7zOxxsn57h89Tgc3z8Iq9EU2OHXZdlTseFnw4GyIXmgbScVIeU-gmWJcAuF7Aj2BftRxWodcuplAb8z5x-du8e4JZSTQD8YNBHqGUDAmkEGpOFeKqwHbU6tECWIAJeq6whZOikAvjbAjgV5baVaF7_7sH4_X9eCsxCXmEwH-765hBFoqrKJX6q_VxwWlFkZ_E1E7-_fL4r-SisTnlWi46ih2Scbg4kS1ndDrSE_ezR9FPeAJPVqJX0nLjSM7INASONBhjZRU7AHl6oM-4_7x-J8OOrrkBXXWXOgkAhVp01b4nXd0xjg5tYFaF9_O3ESVOv8r4Pt7ywm7J2x_Xfepu8ewmpgIS6eQxklE-ixsDDQ6ek4wV1_iZUEq31qFLXTy2uEufOB8hy-LDwnSefq0hnhzONUsotqauDN6rxUm3kcvzugD3j5BONDnScuJ6sR60JFKs9r_L3mmOq5a3ooMu11VlxygaOts6tiuLmQppGga3vKiKQaFAE1dtlXbYlVkugMGnAEDVsOO13lVNVwC8lOpTo3gghQMZ6FNnmKUOz9mOoQVu4oVVZsZMaAJ28wAsPhMtyIBSEPGd1v0hnUMpGBGhxh-okQdDXafJCOJm3UI2o70Uwu3W__E-dd8hGz1pvvjZ7ERDwT6Tdj3AAAA__9DWrOI">