diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-07-08 20:55:45 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-07-08 20:55:45 +0000 |
| commit | 9b146587139824611ccba814da4b36ce7319d0ca (patch) | |
| tree | 99caf5978e288aa8c91b257b5bf758d1dc82cefd /clang/lib/AST/Expr.cpp | |
| parent | fb8d6d5b585eaff2375db2dfd0f235e14c01a3d0 (diff) | |
| download | bcm5719-llvm-9b146587139824611ccba814da4b36ce7319d0ca.tar.gz bcm5719-llvm-9b146587139824611ccba814da4b36ce7319d0ca.zip | |
Implement template argument deduction when taking the address of a
function template. Most of the change here is in factoring out the
common bits used for template argument deduction from a function call
and when taking the address of a function template.
llvm-svn: 75044
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 50dfeebdbcd..970e8bc6c77 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -635,7 +635,8 @@ static bool DeclCanBeLvalue(const NamedDecl *Decl, ASTContext &Ctx) { return isa<VarDecl>(Decl) || isa<FieldDecl>(Decl) || // C++ 3.10p2: An lvalue refers to an object or function. (Ctx.getLangOptions().CPlusPlus && - (isa<FunctionDecl>(Decl) || isa<OverloadedFunctionDecl>(Decl))); + (isa<FunctionDecl>(Decl) || isa<OverloadedFunctionDecl>(Decl) || + isa<FunctionTemplateDecl>(Decl))); } /// isLvalue - C99 6.3.2.1: an lvalue is an expression with an object type or an @@ -659,7 +660,7 @@ Expr::isLvalueResult Expr::isLvalue(ASTContext &Ctx) const { // first, check the type (C99 6.3.2.1). Expressions with function // type in C are not lvalues, but they can be lvalues in C++. - if (TR->isFunctionType()) + if (TR->isFunctionType() || TR == Ctx.OverloadTy) return LV_NotObjectType; // Allow qualified void which is an incomplete type other than void (yuck). |

