template OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result) if (first == last) return result; else { *result = *first; copy(++first, last, ++result); return; } }