https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91364
--- Comment #8 from Will Wray <wjwray at gmail dot com> --- Reduced example (but still with puts output) https://godbolt.org/z/Ttc2Za #include <cstdio> void cat(auto const(&...cstr)[]) { (puts(cstr),...); } // Comment out this next line[6] void cat(auto const(&...cstr)[6]) { (puts(cstr),...); } int main() { cat("Hello","world"); } Fails to match the 1st overload when the 2nd overload is removed Answering my own question "is this well formed?" void cat(auto const(&a)[]...); Yes; it matches T(&)[] type argument exactly https://godbolt.org/z/NHjPrK