diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp @@ -96,7 +96,7 @@ if (auto *Node = Inputs.ASTSelection.commonAncestor()) { if (auto *TypeNode = Node->ASTNode.get()) { if (const AutoTypeLoc Result = TypeNode->getAs()) { - if (!isStructuredBindingType(Node) && + if (!isStructuredBindingType(Node) && !Result.isConstrained() && !isDeducedAsLambda(Node, Result.getBeginLoc()) && !isTemplateParam(Node)) CachedLocation = Result; diff --git a/clang-tools-extra/clangd/unittests/tweaks/ExpandAutoTypeTests.cpp b/clang-tools-extra/clangd/unittests/tweaks/ExpandAutoTypeTests.cpp --- a/clang-tools-extra/clangd/unittests/tweaks/ExpandAutoTypeTests.cpp +++ b/clang-tools-extra/clangd/unittests/tweaks/ExpandAutoTypeTests.cpp @@ -82,6 +82,11 @@ ExtraArgs.push_back("-std=c++17"); EXPECT_UNAVAILABLE("template class Y;"); + ExtraArgs.back() = "-std=c++20"; + EXPECT_UNAVAILABLE( + R"cpp(template concept C = true; +^C a^uto abc(); + )cpp"); } } // namespace