[LLVMbugs] [Bug 11848] New: pack expansion of alias template with non-dependent substitution fails

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Jan 24 13:02:32 PST 2012


http://llvm.org/bugs/show_bug.cgi?id=11848

             Bug #: 11848
           Summary: pack expansion of alias template with non-dependent
                    substitution fails
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++0x
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: richard-llvm at metafoo.co.uk
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified


template<typename> using I = int;

template<typename T, typename...Ts>
int f(I<T> i, I<Ts> ...is) {
  return i + f<Ts>(is...);
};

int k = f<char, double, float>(1, 2, 3);


This causes clang to assert:

src/tools/clang/lib/AST/ASTContext.cpp:2680: clang::QualType
clang::ASTContext::getPackExpansionType(clang::QualType,
llvm::Optional<unsigned int>): Assertion
`Pattern->containsUnexpandedParameterPack() && "Pack expansions must expand one
or more parameter packs"' failed.

The root cause here is presumably that the alias template contains an
unexpanded parameter pack, but its canonical type does not.

I'm not entirely sure whether this is supposed to be legal: on one hand, the
pattern clearly names a parameter pack, but on the other hand, an alias
template is supposed to be equivalent to its substitution, and its substitution
does not name a parameter pack.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list