constexpr weak_ptr() noexcept;
weak_ptr(const weak_ptr& r) noexcept;
template<class Y> weak_ptr(const weak_ptr<Y>& r) noexcept;
template<class Y> weak_ptr(const shared_ptr<Y>& r) noexcept;
Remarks: Второй и третий конструкторы не должны участвовать в разрешении перегрузки, если они Y* не совместимы с T*.
Effects: Если r пусто, создает пустой weak_ptr объект; в противном случае создает weak_ptr объект, который разделяет владение r и хранит копию указателя, хранящегося в r.
weak_ptr(weak_ptr&& r) noexcept;
template<class Y> weak_ptr(weak_ptr<Y>&& r) noexcept;
Remarks: Второй конструктор не должен участвовать в разрешении перегрузки, если он Y* не совместим с T*.