Commit f03c72a5 authored by Tom Stellard's avatar Tom Stellard
Browse files

Merging r221748:

------------------------------------------------------------------------
r221748 | richard-llvm | 2014-11-11 20:43:45 -0500 (Tue, 11 Nov 2014) | 4 lines

PR21536: Fix a corner case where we'd get confused by a pack expanding into the
penultimate parameter of a template parameter list, where the last parameter is
itself a pack, and build a bogus empty final pack argument.

------------------------------------------------------------------------

llvm-svn: 223718
parent 28be27a0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3746,7 +3746,7 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
        }

        // Push the argument pack onto the list of converted arguments.
        if (InFinalParameterPack) {
        if (InFinalParameterPack && !ArgumentPack.empty()) {
          Converted.push_back(
            TemplateArgument::CreatePackCopy(Context,
                                             ArgumentPack.data(),
+17 −1
Original line number Diff line number Diff line
// RUN: %clang_cc1 -fsyntax-only -verify %s
// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11

// Template argument deduction with template template parameters.
template<typename T, template<T> class A> 
@@ -162,3 +162,19 @@ namespace test14 {
    foo(a);
  }
}

namespace PR21536 {
  template<typename ...T> struct X;
  template<typename A, typename ...B> struct S {
    static_assert(sizeof...(B) == 1, "");
    void f() {
      using T = A;
      using T = int;

      using U = X<B...>;
      using U = X<int>;
    }
  };
  template<typename ...T> void f(S<T...>);
  void g() { f(S<int, int>()); }
}