Covers significantly more code in the template template pack argument
test and fixes the resulting assert problem.
Differential Revision: http://reviews.llvm.org/D15743
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@257326
91177308-0d34-0410-b5e6-
96231b3b80d8
case TemplateArgument::Template:
case TemplateArgument::TemplateExpansion: {
NestedNameSpecifierLocBuilder Builder;
- TemplateName Template = Arg.getAsTemplate();
+ TemplateName Template = Arg.getAsTemplateOrTemplatePattern();
if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
Builder.MakeTrivial(SemaRef.Context, DTN->getQualifier(), Loc);
else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
// expected-warning@-2 {{variadic templates are a C++11 extension}}
#endif
-struct template_tuple {};
+struct template_tuple {
+#if __cplusplus >= 201103L
+ static constexpr int N = sizeof...(Templates);
+#endif
+};
template <typename T>
struct identity {};
template <template <typename> class... Templates>
template_tuple<Templates...> f7() {}
+#if __cplusplus >= 201103L
+struct S : public template_tuple<identity, identity> {
+ static_assert(N == 2, "Number of template arguments incorrect");
+};
+#endif
+
void foo() {
f7<identity>();
}