It is still cumbersome to use (need to pass a useless parameter and the function signature needs to accept said useless parameter) and you are still paying a price in memory footprint to hold this nothing parameter. Though I will agree that that last is probably insignificant, especially on the stack (the only place where I think a scope guard would be of any use), it is still against c++ you don't pay for what you don't use philosophy.

On Wed, Aug 4, 2021 at 4:47 PM Arthur O'Dwyer via Std-Proposals <std-proposals@lists.isocpp.org> wrote:
On Wed, Aug 4, 2021, 9:31 AM Jens Maurer via Std-Proposals <std-proposals@lists.isocpp.org> wrote:

In the interest of clarity, the shortest generic scope guard using
std::unique_ptr that I've come up with so far is:


template<class X>
using scope_guard = std::unique_ptr<void, X>;

void f()
{
  scope_guard guard(0, [](void*) { std::cout << "hi"; });
}

This is pretty neat, actually! But are you sure that unique_ptr calls its deleter when it holds nullptr? I think you need to replace `0` with `&guard`, or maybe replace `unique_ptr` with `shared_ptr`, in order to make this behave correctly.

You could save one more character by changing `void*` to `auto`.

Arthur
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals