]> granicus.if.org Git - clang/commit
Work-in-progress implementation of C++0x [temp.arg.explicit]p9, which
authorDouglas Gregor <dgregor@apple.com>
Mon, 10 Jan 2011 07:32:04 +0000 (07:32 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 10 Jan 2011 07:32:04 +0000 (07:32 +0000)
commitd3731198193eee92796ddeb493973b7a598b003e
tree2e177b315fbcbb6cbfbeb16e30171da0cc1e2e3f
parent2770eb1294f425710e5802011e302a91a3614eb2
Work-in-progress implementation of C++0x [temp.arg.explicit]p9, which
allows an argument pack determines via explicit specification of
function template arguments to be extended by further, deduced
arguments. For example:

template<class ... Types> void f(Types ... values);
void g() {
  f<int*, float*>(0, 0, 0);   // Types is deduced to the sequence int*, float*, int
}

There are a number of FIXMEs in here that indicate places where we
need to implement + test retained expansions, plus a number of other
places in deduction where we need to correctly cope with the
explicitly-specified arguments when deducing an argument
pack. Furthermore, it appears that the RecursiveASTVisitor needs to be
auditied; it's missing some traversals (especially w.r.t. template
arguments) that cause it not to find unexpanded parameter packs when
it should.

The good news, however, is that the tr1::tuple implementation now
works fully, and the tr1::bind example (both from N2080) is actually
working now.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123163 91177308-0d34-0410-b5e6-96231b3b80d8
13 files changed:
include/clang/AST/RecursiveASTVisitor.h
include/clang/AST/TemplateBase.h
include/clang/Sema/Sema.h
include/clang/Sema/Template.h
lib/Sema/SemaTemplate.cpp
lib/Sema/SemaTemplateDeduction.cpp
lib/Sema/SemaTemplateInstantiate.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
lib/Sema/SemaTemplateVariadic.cpp
lib/Sema/TreeTransform.h
test/CXX/temp/temp.decls/temp.variadic/example-bind.cpp [new file with mode: 0644]
test/CXX/temp/temp.decls/temp.variadic/example-tuple.cpp
test/CXX/temp/temp.fct.spec/temp.arg.explicit/p9-0x.cpp