Example STL Error Message

This function:
template <typename T>
void print4(T& v)
{
  T::iterator iter;
  for (iter = v.begin(); iter != v.end(); ++iter)
    std::cout << *iter << "  ";
  std::cout << std::endl;
}
called with this code:
  // Create a list of strings
std::list<std::string> cont1;
cont1.push_back("one");
cont1.push_back("two");
cont1.push_back("three");
cont1.push_back("four");

  // Create a copy of the list of strings
const std::list<std::string> cont2(cont1);

print4(cont1);  // Print the first list of strings
print4(cont2);  // Print the second list of strings
produces the error message below. Why?
main.cpp(598) : error C2679: binary '=' : 
no operator defined which takes a right-hand operand of type 
'class std::list,class std::allocator >,
class std::allocator,class std::allocator > > >::const_iterator' 
(or there is no acceptable conversion)
main.cpp(663) : see reference to function template instantiation 
'void __cdecl print4(const class std::list,class std::allocator >,class
std::allocator,
class std::allocator > > > &)' being compiled
main.cpp(598) : error C2679: binary '!=' : 
no operator defined which takes a right-hand operand of type 
'class std::list,
class std::allocator >,class std::allocator,class std::allocator > > >::const_iterator' 
(or there is no acceptable conversion)
main.cpp(663) : see reference to function template instantiation 
'void __cdecl print4(const class std::list,class std::allocator >,class
std::allocator,
class std::allocator > > > &)' being compiled