1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- //===- unittest/Tooling/RecursiveASTVisitorTests/LambdaTemplateParams.cpp -===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- #include "TestVisitor.h"
- using namespace clang;
- namespace {
- // Matches (optional) explicit template parameters.
- class LambdaTemplateParametersVisitor
- : public ExpectedLocationVisitor<LambdaTemplateParametersVisitor> {
- public:
- bool shouldVisitImplicitCode() const { return false; }
- bool VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
- EXPECT_FALSE(D->isImplicit());
- Match(D->getName(), D->getBeginLoc());
- return true;
- }
- bool VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
- EXPECT_FALSE(D->isImplicit());
- Match(D->getName(), D->getBeginLoc());
- return true;
- }
- bool VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
- EXPECT_FALSE(D->isImplicit());
- Match(D->getName(), D->getBeginLoc());
- return true;
- }
- };
- TEST(RecursiveASTVisitor, VisitsLambdaExplicitTemplateParameters) {
- LambdaTemplateParametersVisitor Visitor;
- Visitor.ExpectMatch("T", 2, 15);
- Visitor.ExpectMatch("I", 2, 24);
- Visitor.ExpectMatch("TT", 2, 31);
- EXPECT_TRUE(Visitor.runOver(
- "void f() { \n"
- " auto l = []<class T, int I, template<class> class TT>(auto p) { }; \n"
- "}",
- LambdaTemplateParametersVisitor::Lang_CXX2a));
- }
- } // end anonymous namespace
|