Just like in the title, for the whole abstraction! No more regular asserts, only Boost ones! You will be using the boost.assert library and replacing any std::abort / assert calls you see with descriptive BOOST_ASSERT_MSG calls.
Some internal work needs to be done for boost::shared_ptr. Specifically, an additional OR'd condition needs to be added to this place here to ensure that boost::shared_ptr does not fall into the same pitfall as std::shared_ptr as documented by that static_assert.
The goal will be to forward declare the boost::shared_ptr type and then write the another is_specialization_of call there.
An example should be written using a std::shared_ptr and boost::shared_ptr with a C API. There is a fictional C API with ficapi: you can look at the tests here to see it and see the actual shim repository and its functions.
This example should just demonstrate how to use std::out_ptr and std::inout_ptr with std::shared_ptr and boost::shared_ptr: it can be filled in here and here.
An example should be written using the pthread API (example here) that shows the usage of out_ptr to retrieve the exit value returned by the executed pthread function. It should show off the out_ptr<void*>(...).
The example can be written into here. Since this is Linux-specific, it should be gated by a #ifdef __linux__...#endif.
This is meant to be a C++11 Boost Library. Therefore, all C++14-isms must go away. One of those C++14-isms if std::enable_if_t: it should be replaced by boost::mp11::mp_if_c<(Boolean Condition), void>!
This issue is to make sure none of those are left.
An example should be written using a std::unique_ptr with a C API. There is a fictional C API with ficapi: you can look at the tests here to see it and see the actual shim repository and its functions here.
This example should just demonstrate how to use std::out_ptr and std::inout_ptr with std::unique_ptr: it can be filled in here.
While it is a simpler library, having all of the important information in the proposal is not suitable for submission to Boost. We need a form of documentation and a way of documenting it.
A more involved customization point should be written for boost:;move::unique_ptr, following the clever_out_ptr_impl optimization and the clever_inout_ptr_impl optimizations applied to std::unique_ptr. The type should be forward-declared and then hooked into the same optimization.
One area that more tests could be performed for is to test if resource leakage occurs if an exception is thrown after the desired API is used and there's a failure. There is a function in the tests for producing a "failure": please use it and test what happens if an exception is thrown and caught post-success and post-failure.
New libraries should use boost::library:: namespaces. e.g. boost::out_pointer:: (or boost::out_ptr::, but boost::out_ptr::out_ptr doesn't look very nice).
i.e. Only the older existing libraries use just namespace boost::. All newer libraries have been required to create a namespace within boost:: and use that.
Your detail namespace then becomes boost::library::detail::.
A C++17-ism is the type traits that are suffixed by _v. What it does is produce an actual boolean value representing the original type trait's ::value boolean: either true or false. All instances of _v need to be removed to explicitly used the regular type trait and then getting it suffixed by ::value.