Ordering things more nicely for GCC and fixing calls to always used extra `types` parameters when they can for early-out decltype deduction, rather than recursive template reliance (compiles better for VC++ and resolves earlier for g++).