https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113443
Bug ID: 113443
Summary: GCC rejects valid program involving parameter packs
with in between class type
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jlame646 at gmail dot com
Target Milestone: ---
In the following program gcc accepts the call when a built in type object is
passed while rejects the call when a class type object is passed.
https://godbolt.org/z/Ez5oocGrr
```
#include <array>
#include <cstddef>
#include <tuple>
#include <type_traits>
#include <iostream>
struct in_between{};
template <typename... T>
struct args_tag
{
};
template <typename... T>
void bar(args_tag<T...>, std::type_identity_t<T>..., int,
std::type_identity_t<T>...) {}
template <typename... T>
void bar(args_tag<T...>, std::type_identity_t<T>..., in_between,
std::type_identity_t<T>...) {}
// example
int main() {
bar(args_tag<int, int>{}, 4, 8, in_between{}, 16, 23); // gcc rejects this
//bar(args_tag<int, int>{}, 4, 8, int{}, 16, 23); //GCC accepts this
}
```