Pointer type that acts like a std::unique_ptr, but that may or may not actually own its data, and lets the user check at runtime whether it is owned.
It is the moral equivalent of a std::variant<std::unique_ptr<T>, T*>, with an interface to get the value of the pointer regardless of whether it owns its underlying data.
It takes some inspiration from Rust's Copy-On-Write Cow type.
#include <maybe_ptr.h>
int main()
{
auto owner = make_owner<int>(42); // allocate a new int*
auto observer = make_observer(owner); // observes the owner ptr
*owner = 12;
assert(*observer == 12);
*observer = 6;
assert(*owner == 6);
}The library is header only, hence no building is required. Building requires at least C++14. You can use the provided CMake file to install the header in a system-wide directory, or to compile the examples.
cmake -Dmaybe_ptr_EXAMPLES=ON <src-dir> # from <build-dir>
makeThe source for the examples can be found in the examples directory