this shouldn't need to be typedef'd if you use auto