The C++23 std::out_ptr and std::inout_ptr allow interoperability between C++ smart pointers and C-style APIs.
A typical pattern in C APIs is that the (re-)allocating function accepts the handle to be allocated as either T** or void**.
Note that the result of calling std::out_ptr and std::inout_ptr is meant to be a temporary that should not outlive the current expression.
Compiler Explorer link: https://compiler-explorer.com/z/64dP3YP6x