Hi, everyone. This code compiles and runs, producing the expected output:

Code:
#include <iostream>
 
template<typename T, std::size_t n>
std::ostream& operator<<(std::ostream& os, const T (&arr)[n])
{
    std::size_t i;
 
    for (i = 0; i < n; ++i)
    {
        if (i > 0)
            os << ' ';
 
        os << arr[i];
    }
 
    return os;
}
 
int main()
{
    int n[10] = { 1,2,3,4,5,6,7,8,9,10 };
    std::string s[2] = { "Hello, world", "Goodbye, Earth" };
 
    std::cout << n << '\n';
    std::cout << s << '\n';
}
My concern is that the line os << ' '; must be given a single character. If I give it a zero-terminated char array (such as " ") then the compiler doesn't know whether to recurse into my user-defined function, or use the regular ostream:: operator<<().

How do I say "use the one that you had before this function existed"? Or even better, "don't use this function if you already have one", or "don't use this one for char arrays".