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

            Bug ID: 98706
           Summary: spurious unused-set-but-not-used when a parameter pack
                    is empty
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: barry.revzin at gmail dot com
  Target Milestone: ---

Short test case:

template <typename... T>
constexpr auto f(T... ts) {
    auto id = [](auto x){ return x; };
    return (id(ts) + ... + 0);
}

static_assert(f() == 0);

Emits:

<source>: In instantiation of 'constexpr auto f(T ...) [with T = {}]':
<source>:7:17:   required from here
<source>:3:10: warning: variable 'id' set but not used
[-Wunused-but-set-variable]
    3 |     auto id = [](auto x){ return x; };
      |          ^~
Compiler returned: 0

This is basically bug #56958, but the commentary there suggests that the
warning is okay and I want to be clear that the warning is a false positive
here. The warning persists even if a different instantiation of 'f' uses 'id'.

Reply via email to