, , , ++ ( ) . , , , ( UDT): ( ), ( , ).
, . , , , : , .
. Herb Sutter.
, , boost. std (ostream, string, vector), POD (int). std operator <<, () , . , () , boost, , operator <<, .
boost::has_left_shift, , - SFINAE , , , false value.
UPDATE:
, . , . ADL , std operator <<, - , operator << std .
, std ( , , operator <<), ++. , std ( ); , , vector<int>. , , .
: , . - Boost.TypeTraits. , , .
, boost::detail::has_left_shift_impl, , Boost.
, , :
namespace boost
{
namespace detail
{
namespace has_left_shift_impl
{
ostream& operator<<(ostream& stream, const Point& p)
{
stream << p.getStr();
return stream;
}
template <typename T>
std::ostream& operator<<(std::ostream& stream, const std::vector<T>& v)
{
stream << "[";
for(auto it = v.begin(); it != v.end(); ++it)
{
if(it != v.begin())
stream << ", ";
stream << *it;
}
stream << "]";
return stream;
}
}
}
}
.
: GCC 4.7.2 . , Clang 3.2, -, , boost::details::has_left_shift_impl has_left_shift.hpp. , .