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

            Bug ID: 88580
           Summary: Parameter pack expansion fails (variadic constructor
                    template inside a variadic class template)
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: philodej at gmail dot com
  Target Milestone: ---

The following simple code snippet compiles as expected on clang, msvc and icc,
but fails to compile on gcc (any version I have tried):

[https://godbolt.org/z/2uLKgn]

#include <string>

struct Policy {
    explicit Policy(std::string arg) {}
};

template <typename... Base>
struct Scope : private Base... {
  template <typename... T>
  Scope(T&&... args)
      : Base(std::forward<T>(args)...)... {
  }
};

int main() {
    const auto scope = Scope<Policy>{std::string{}};
}

... with following (seemingly meaningless) error:

   error: no matching function for call to 'Policy::Policy(bool)'

If any of the parameter packs is replaced with a single template parameter then
the code compiles OK. So it seems that compiler is confused by combination of
two pack expansions.

Sorry if this kind of error has been reported already (I know that there are
already several bugs reported regarding variadic template parameter expansion
but none of them seemed to me identical to this one).

Reply via email to