deduction guides for std::shared_ptr

< cpp‎ | memory‎ | shared ptr
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
Relational operators (deprecated in C++20)
Integer comparison functions
Swap and type operations
Common vocabulary types

Elementary string conversions
Dynamic memory management
Smart pointers
(until C++17)
Memory resources
Uninitialized storage
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Garbage collection support
C Library
Low level memory management
Defined in header <memory>
template <class T>
shared_ptr(std::weak_ptr<T>) ->  shared_ptr<T>;
(1) (since C++17)
template <class T, class D>
shared_ptr(std::unique_ptr<T, D>) ->  shared_ptr<T>;
(2) (since C++17)

These deduction guides are provided for std::shared_ptr to account for the edge cases missed by the implicit deduction guides.

Note that there is no class template argument deduction from pointer types because it is impossible to distinguish pointers obtained from array and non-array forms of new.

[edit] Example

#include <memory>
int main()
    auto p = std::make_shared<int>(42);
    std::weak_ptr w{p};    // explicit deduction guide is used in this case
    std::shared_ptr p2{w}; // explicit deduction guide is used in this case