trying to work out templated return type stuff but msvc is giving me a bunch of bullshit about my lambdas