&quot;auto a = ConjureMagic();&quot;
&quot;SetMagic(a);&quot;<p>The problem here is actually is an old one of failing to separate a getter from a command.<p>It looks like ConjureMagic is causing side effects and modifying the state of whatever class it belongs to.<p>This is also the reason one can&#x27;t answer the question &quot;what the heck is a?&quot;. If the &quot;ConjureMagic&quot; is only a getter and does not modify class state, it may probably need a better name, like &quot;GetMaxMagicPossible&quot;. That renders an auto no longer confusing, because this name explains more than the return type. If, on the other hand this is just a command to conjure the magic and we are getting the remaining amount only to immediately pass it to the member &quot;SetMagic&quot; function, then there was no point in returning this value - it could be done inside the &quot;ConjureMagic&quot; itself.