Use extended slot, Signals2
passes the connection object to it. It's designed primarily for thread-safety, but you can utilize it for your purposes as well:
somesignal.connect([](const connection &c)->void
{
// Do something
c.disconnect();
});
(By the way, as opposed to what the title implies, it's actually not an "auto-disconnection", but the manual one. To disconnect slots automatically, one could use the tracking mechanism.)