[llvm-bugs] [Bug 43944] variadic template function passed an initializer list fails with argument count mismatch error rather than expected "couldn't deduce template parameter" error

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Jan 6 18:12:33 PST 2020


Richard Smith <richard-llvm at metafoo.co.uk> changed:

           What    |Removed                     |Added
         Resolution|---                         |FIXED
             Status|NEW                         |RESOLVED

--- Comment #2 from Richard Smith <richard-llvm at metafoo.co.uk> ---
Fixed in llvmorg-10-init-16681-g907cefe7214. (This is slightly speculative;
I've mailed the C++ committee core working group to discuss this, but I think
deducing T as a pack of one unknown element here rather than as an empty pack
is obviously the right thing to do.)

We now accept the testcase from comment#0, and diagnose the testcase from
comment#1 as:

test.cc:28:5: error: no matching function for call to 'variadic'
test.cc:12:27: note: candidate template ignored: substitution failure: deduced
incomplete pack <(no value)> for template parameter 'T'
template<class... T> void variadic(T&&...) {}
                  ~       ^
test.cc:32:5: error: no matching function for call to 'single'
test.cc:14:24: note: candidate template ignored: couldn't infer template
argument 'T'
template<class T> void single(T&&) {}

Note that we accept the

  x = {0};

line now, as a call to the move assignment operator (that is, as "x = X{0};"),
because deduction for the templated operator= now fails due to failing to
deduce a complete value for parameter T.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200107/d1e07431/attachment.html>

More information about the llvm-bugs mailing list