Вы можете изменить процедуру копирования, чтобы использовать шаблон для приведения ...
template <typename A, typename B>
const A& cast(const A&, const B& b)
{
return *reinterpret_cast<const A*>(&b);
};
template <class InputIterator, class OutputIterator>
OutputIterator mycopy(InputIterator first, InputIterator last,
OutputIterator result)
{
for ( ; first != last; ++first, ++result)
*result = cast(*result, *first);
return result;
}
Тем не менее, ответ Оли намного лучше, если вы не хотите специально изучать, как изменить копию, чтобы справиться с этим.....