Dear Boost Community, I was encouraged to submit this small library that I had created as a formal public investigation of the performance and API-interop benefits to the Boost Mailing List, to perhaps see if other people have come up with something similar to this at their own comapnies. out_ptr is a small abstraction for making types such as std::unique_ptr, std::shared_ptr, boost::shared_ptr, and the upcoming std::retain_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0468r0.html work work C-Style output functions as a parameter, addressing the need of wanting to be able to do "my_c_api_init( foo, bar, &my_smart_ptr );". It's design is meant to be extensible by both the library implementer and the user, enabling it to be used with other pointer types that do not originate from either `boost::` or `std::`. The library replaces the sought-after syntax of: my_c_api_init( foo, bar, &my_start_ptr ); with a free function that does not impose on the interface of the smart pointer: my_c_api_init( foo, bar, out_ptr( my_smart_ptr ) ); This makes it possible to use a temporary return value to give a reference to a pointer value that then performs a reset on the smart pointer. Is there any want for something like this? I know it has seen use at companies and Studios I have worked in and interacted with, including Microsoft and VMWare. std::retain_ptr's author also has a need for this to make interop easier with reference-counting C APIs and beyond, and I myself implemented something like it 5 years ago and have been using it ever since. Sincerely, JeanHeyd P.S.: this is also going to end up going in the Post-Rapperswil Standards C++ Mailing as well. The proposal is also contained in the repository: https://rawgit.com/ThePhD/out_ptr/master/papers/d1132.html