[LLVMbugs] [Bug 12937] New: Rejects-valid when deleting an explicit template specialization

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu May 24 12:06:11 PDT 2012


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

             Bug #: 12937
           Summary: Rejects-valid when deleting an explicit template
                    specialization
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++11
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: dblaikie at gmail.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Given this:

  template<typename> void func();
  template<> void func<int>() = delete;

Clang produces this error: 

  spec.cpp:2:31: error: deleted definition must be first declaration
  template<> void func<int>() = delete;
                                ^
  spec.cpp:2:17: note: previous declaration is here
  template<> void func<int>() = delete;
                  ^

It seems Clang produces an implicit specialization of the declaration from the
primary template and then make the user's explicit specialization as a
redeclaration of the implicit one. Thus, it looks like it's a redeclaration and
triggers the error.

This code is explicitly valid based on 8.4.3 [dcl.fct.def.delete] p4:

"A deleted definition of a function shall be the first declaration of the
function or, for an explicit specialization of a function template, the first
declaration of that specialization."

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