Standard C++ Library Reference ISO/IEC (VERSION3)

char ch);
behaves the same as:
template<class Elem, class Tr>
basic_ostream<Elem, Tr>&
operator<<(basic_ostream<Elem, Tr>& ostr,
Elem ch);
except that ch is converted to an object of type Elem by calling ostr.put(ostr.
widen(ch)).
The template function:
template<class Tr>
basic_ostream<char, Tr>&
operator<<(basic_ostream<char, Tr>& ostr,
const char *str);
behaves the same as:
template<class Elem, class Tr>
basic_ostream<Elem, Tr>&
operator<<(basic_ostream<Elem, Tr>& ostr,
const Elem *str);
(It does not have to widen the elements before inserting them.)
The template function:
template<class Tr>
basic_ostream<char, Tr>&
operator<<(basic_ostream<char, Tr>& ostr,
char ch);
behaves the same as:
template<class Elem, class Tr>
basic_ostream<Elem, Tr>&
operator<<(basic_ostream<Elem, Tr>& ostr,
Elem ch);
(It does not have to widen ch before inserting it.)
The template function:
template<class Tr>
basic_ostream<char, Tr>&
operator<<(basic_ostream<char, Tr>& ostr,
const signed char *str);
returns ostr << (const char *)str.
The template function: