The algorithm was too conservative causing lots of unnecessary temporaries to be created.
Forwarded temporaries would never declare a temporary. Figure out all result types ahead of time so we can deal with those temporaries as well.