#include #include #include struct setter { setter (bool &_flag): flag (_flag) { ; } void release (unsigned *) { flag = true; } bool &flag; }; int main (void) { bool flag = false; { // setup a pretend resource. we're not going to delete it, it's just // to satisfy some required parameters. importantly it can't be null // otherwise release is skipped. unsigned *foo = reinterpret_cast (0x01); // setup the owner who will set a flag when the release operation is // called setter bar (flag); // setup our non-default unique_ptr std::unique_ptr< unsigned, cruft::memory::owner_deleter< unsigned, setter, &setter::release > > qux (foo, bar); } // the flag should have been implicitly set to true via the unique_ptr // callback above cruft::TAP::logger tap; tap.expect (flag, "owner_deleter calls registered callback"); return tap.status (); }