Deduce callback return type automatically, uses variadic templates