[LLVMbugs] [Bug 14419] New: Possible misbehavior with multiple variadic template parameter packs

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Nov 23 02:13:25 PST 2012


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

             Bug #: 14419
           Summary: Possible misbehavior with multiple variadic template
                    parameter packs
           Product: clang
           Version: 3.1
          Platform: Macintosh
        OS/Version: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++11
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: warp.grrr at gmx.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified


I believe that clang++ either handles the following situation incorrectly or,
at the very least, requires improvements on its analysis of the situation and
subsequent error messages. (I have to admit, however, that I do not know how
the C++11 standard specifies how this should be handled.) Consider the
following function definition:

    template<typename... Pack1, typename... Pack2>
    void func(Pack1... pack1, Pack2... pack2) {}

If the above function is called without parameters, as in "func();", clang++
issues the following error:

  No matching function for call to 'func'
  Candidate function template not viable: requires at least 1 argument, but 0
were provided

However, if it's called with eg. one parameter, like "func(5);", it issues the
(rather contradictory) error:

  No matching function for call to 'func'
  Candidate function not viable: requires 0 arguments, but 1 was provided

(A notable difference is that the first error mentions the function being a
template, while the second does not.)

Note that calling it like "foo<int>(5);" does compile and work ok. (All
parameters given to the function are passed as the 'pack1' parameter.)

Also note that in gcc the function call compiles ok without having to specify
the template parameter types. (Curiously in gcc all parameters are passed as
the 'pack2' parameter. I'm guessing the standard leaves it open to the
implementation.)

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