 <p>The "semi-convoluted" solution using <code>std::bind</code> as mentioned by Nicol Bolas is not so bad after all:</p> <pre><code>std::function&lt;void ()&gt; getAction(std::unique_ptr&lt;MyClass&gt;&amp;&amp; psomething) { return std::bind([] (std::unique_ptr&lt;MyClass&gt;&amp; p) { p-&gt;do_some_thing(); }, std::move(psomething)); } </code></pre>