VS.net的中_Uninit_copy函数奇怪的memmove调用(附代码),请求解惑,该如何解决

VS.net的<memory>中_Uninit_copy函数奇怪的memmove调用(附代码),请求解惑
template <class   _Ty1,
class   _Ty2>   inline
_Ty2   *_Uninit_copy(_Ty1   *_First,   _Ty1   *_Last,   _Ty2   *_Dest,
allocator <_Ty2> &,   _Scalar_ptr_iterator_tag)
{ //   copy   [_First,   _Last)   to   raw   _Dest,   (const)   scalar   type
size_t   _Count   =   (size_t)(_Last   -   _First);

//   就是下面的语句,为什么要加_Count?
return   ((_Ty2   *)memmove(&*_Dest,   &*_First,
_Count   *   sizeof   (*_First))   +   _Count); //   NB:   non-overlapping   move
}


------解决方案--------------------
代码好读多了吧。
现在你能看懂为啥要加_Count了吧。
------解决方案--------------------
// 就是下面的语句,为什么要加_Count?

返回值的意义:
memmove 返回的是 *_Dest,
+ _Count 就是返回 *_Dest 有效数据区域的末尾部分。

也就是 _Uninit_copy 返回拷贝结束后 _Dest 的最后位置。