следующие 2 из конструкторов слабых_птров: http://msdn.microsoft.com/en-us/library/bb982126.aspx
weak_ptr(const weak_ptr&);
template<class Other>
weak_ptr(const weak_ptr<Other>&);
фактический код (из memory
):
weak_ptr(const weak_ptr& _Other)
{ // construct weak_ptr object for resource pointed to by _Other
this->_Resetw(_Other);
}
template<class _Ty2>
weak_ptr(const weak_ptr<_Ty2>& _Other,
typename enable_if<is_convertible<_Ty2 *, _Ty *>::value,
void *>::type * = 0)
{ // construct weak_ptr object for resource pointed to by _Other
this->_Resetw(_Other);
}
Q1: Почему конструктор верхнего копирования дажетам?Похоже, что нижний счет для каждого случая (включая верхний).Это даже называют?и если бы они не включили его, занял бы его нижний?
Q2: Что происходит со вторым аргументом нижнего (шаблонного) конструктора.Я думаю, что понимаю аспект SFINAE, но я не понимаю, почему после ::type
возникает дополнительный *