Commit Graph

505 Commits

Author SHA1 Message Date
Douglas Gregor cceb97559e Improve template argument deduction for reference parameters when
deducing template arguments from a function call. Plus, add a bunch of
tests.

llvm-svn: 74301
2009-06-26 18:27:22 +00:00
Douglas Gregor ad3f2fcf43 Improved semantic analysis and AST respresentation for function
templates.

For example, this now type-checks (but does not instantiate the body
of deref<int>):

  template<typename T> T& deref(T* t) { return *t; }

  void test(int *ip) {
    int &ir = deref(ip);
  }

Specific changes/additions:
  * Template argument deduction from a call to a function template.
  * Instantiation of a function template specializations (just the
  declarations) from the template arguments deduced from a call.
  * FunctionTemplateDecls are stored directly in declaration contexts
  and found via name lookup (all forms), rather than finding the
  FunctionDecl and then realizing it is a template. This is
  responsible for most of the churn, since some of the core
  declaration matching and lookup code assumes that all functions are
  FunctionDecls.

llvm-svn: 74213
2009-06-25 22:08:12 +00:00
Douglas Gregor 23061ded56 Implement matching of function templates, so that one can declare overloaded function templates. C++ [temp.over.link] paragraphs 4-8.
llvm-svn: 74079
2009-06-24 16:50:40 +00:00
Douglas Gregor 2b154f41f2 Add a test illustrating our current inability to properly cope with the point of instantation of a member function of a class template specialization
llvm-svn: 73956
2009-06-23 15:45:29 +00:00
Douglas Gregor a5d5c749b1 Move a bunch of tests into temp.param, and write a few tests for paragraphs that hadn't been touched before
llvm-svn: 73288
2009-06-13 06:59:07 +00:00