https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107450
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Reduced/simplified (using auto because I feel like it): int i, j, k; void f(auto){i++;} void g(auto){j++;} void h(auto){k++;} void foo(auto&&...args1, auto&&... args2, auto&&... args3) { (f(args1), ...); (g(args2), ...); (h(args3), ...); } int main(int argc, char** argv) { foo(1,2,3,4,5,6); //gcc and clang compiles this while msvc correctly rejects this __builtin_printf("args1: %d, args2: %d, args3: %d.\n", i, j, k); }