Refactor function::__callable, nested template is too much for MSVC to handle