Teach code completion to instantiate templates when it needs to

llvm-svn: 91138
This commit is contained in:
Douglas Gregor 2009-12-11 18:28:39 +00:00
parent 7078839b0e
commit 800f2f0ff0
2 changed files with 23 additions and 6 deletions

View File

@ -1740,7 +1740,12 @@ void Sema::CodeCompleteQualifiedId(Scope *S, const CXXScopeSpec &SS,
DeclContext *Ctx = computeDeclContext(SS, EnteringContext);
if (!Ctx)
return;
// Try to instantiate any non-dependent declaration contexts before
// we look in them.
if (!isDependentScopeSpecifier(SS) && RequireCompleteDeclContext(SS))
return;
ResultBuilder Results(*this);
unsigned NextRank = CollectMemberLookupResults(Ctx, 0, Ctx, Results);

View File

@ -1,16 +1,28 @@
namespace std {
template<typename T>
class allocator;
class allocator {
public:
void in_base();
};
template<typename T, typename Alloc = std::allocator<T> > class vector;
template<typename T, typename Alloc = std::allocator<T> >
class vector : Alloc {
public:
void foo();
void stop();
};
template<typename Alloc> class vector<bool, Alloc>;
}
void f() {
std::
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:10:8 %s -o - | FileCheck -check-prefix=CC1 %s
std::vector<int> v;
v.foo();
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:18:8 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1: allocator<<#typename T#>>
// CHECK-CC1-NEXT: vector<<#typename T#>{#, <#typename Alloc#>#}>
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:19:5 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
// CHECK-CC2: foo
// CHECK-CC2: in_base
// CHECK-CC2: stop