[LLVMbugs] [Bug 8771] New: Redeclaring partial specializations is disallowed sometimes

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Dec 10 05:10:16 PST 2010


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

           Summary: Redeclaring partial specializations is disallowed
                    sometimes
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: schaub.johannes at googlemail.com
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


Clang does in general accept redeclaring partial specializations, like
requested by 9.2[class.mem]p1, but does not do so in the following example,
which I derived from wg21 core issue #996

  template<typename T, typename U>
  struct Outer {
    template<typename X, typename Y> struct Inner;
    template<typename Y> struct Inner<T, Y>;
    template<typename Y> struct Inner<U, Y> {};
  };

  Outer<int, int> outer;  

This is a "declared and then later defined" scenario of a member class
template, but Clang shouts:

main1.cpp:5:33: error: class template partial specialization 'Inner<int, Y>'
cannot be redeclared
    template<typename Y> struct Inner<U, Y> {};
                                ^
main1.cpp:8:19: note: in instantiation of template class 'Outer<int, int>'
requested here                                                             
  Outer<int, int> outer;  
                  ^
main1.cpp:4:33: note: previous declaration of class template partial
specialization 'Inner<int, type-parameter-0-0>' is here                         
    template<typename Y> struct Inner<T, Y>;

-- 
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