A workaround to the original code could be:
template<int...n> struct StrStuff {
template<int...n0> explicit StrStuff(char const(&...s)[n0]) {}
};
template<int...n> StrStuff(char const(&...s)[n])->StrStuff<n...>;
int main() {
StrStuff g("apple", "pie");
}
But I still wonder why the original code can/can't compile in different compilers.