Member function templates can occur after . or ->

llvm-svn: 91137
This commit is contained in:
Douglas Gregor 2009-12-11 18:14:22 +00:00
parent 30e94d047e
commit 7078839b0e
2 changed files with 14 additions and 4 deletions

View File

@ -587,7 +587,8 @@ bool ResultBuilder::IsMember(NamedDecl *ND) const {
if (UsingShadowDecl *Using = dyn_cast<UsingShadowDecl>(ND))
ND = Using->getTargetDecl();
return isa<ValueDecl>(ND) || isa<ObjCPropertyDecl>(ND);
return isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND) ||
isa<ObjCPropertyDecl>(ND);
}
// Find the next outer declaration context corresponding to this scope.

View File

@ -6,9 +6,18 @@ namespace std {
X* dyn_cast(Y *Val);
}
class Foo {
public:
template<typename T> T &getAs();
};
void f() {
std::
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:10:8 %s -o - | FileCheck -check-prefix=CC1 %s
std::sort(1, 2);
Foo().getAs<int>();
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:15:8 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1: dyn_cast<<#class X#>>(<#Y *Val#>)
// CHECK-CC1: sort(<#RandomAccessIterator first#>, <#RandomAccessIterator last#>)
// CHECK-CC1: sort(<#RandomAccessIterator first#>, <#RandomAccessIterator last#>
// RUN: clang-cc -fsyntax-only -code-completion-at=%s:16:9 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
// CHECK-CC2: getAs<<#typename T#>>()
)