public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/102928] New: Template argument deduction when mixing variadic template with C-style variadic function
@ 2021-10-25 12:29 cerrigno at gmail dot com
  2021-11-06 22:10 ` [Bug c++/102928] " pinskia at gcc dot gnu.org
  0 siblings, 1 reply; 2+ messages in thread
From: cerrigno at gmail dot com @ 2021-10-25 12:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102928

            Bug ID: 102928
           Summary: Template argument deduction when mixing variadic
                    template with C-style variadic function
           Product: gcc
           Version: 11.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cerrigno at gmail dot com
  Target Milestone: ---

GCC fails to deduce template arguments when mixing variadic template with
C-style variadic function.

This code compiles fine on clang, MSVC and ICC.

```
template <typename... Args>
constexpr auto foo(Args&& ...args, ...) noexcept {
    return sizeof...(args);
}

constexpr auto bar() noexcept {
        return foo<int>(1, 2);
}

static_assert(bar() == 2, "");
```

but on GCC bar() returns 1.

Even if not so clear on the standard, the correct output should be 2. More
information can be found on this answer on StackOverflow:
https://stackoverflow.com/a/69700603/3287591

See also this sandbox on Compiler Explorer: https://godbolt.org/z/e5v74n6fE

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bug c++/102928] Template argument deduction when mixing variadic template with C-style variadic function
  2021-10-25 12:29 [Bug c++/102928] New: Template argument deduction when mixing variadic template with C-style variadic function cerrigno at gmail dot com
@ 2021-11-06 22:10 ` pinskia at gcc dot gnu.org
  0 siblings, 0 replies; 2+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-11-06 22:10 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102928

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-11-06
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
temp.deduct.call

For a function parameter pack that occurs at the end of the
parameter-declaration-list,
deduction is performed for each remaining argument of the call, taking the type
P of the declarator-id of the
function parameter pack as the corresponding function template parameter type.
Each deduction deduces
template arguments for subsequent positions in the template parameter packs
expanded by the function
parameter pack.


parameter-declaration-list does not include the ... variadic arguments part.

So Confirmed.

As far as I read in the standard, the template variadic deduction should be
greedy (deduction is performed for each remaining argument of the call).

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-11-06 22:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-25 12:29 [Bug c++/102928] New: Template argument deduction when mixing variadic template with C-style variadic function cerrigno at gmail dot com
2021-11-06 22:10 ` [Bug c++/102928] " pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).