 typedefs <i>v1_t</i> and <i>v2_t</i>. These use <code>std::iterator_traits&lt;Iter1&gt;::value_type</code>
to determine what type the two iterators point to, and then feed
the result into another type-traits class <i>remove_cv</i> that
removes the top-level const-volatile-qualifiers: this will allow
copy to compare the two types without regard to const- or
volatile-qualifiers. Next, <font size="2" face="Courier New">copy</font>
declares an enumerated value <i>can_opt</i> that will become the
template param