Changes std::function<void(T)> like function parameters back to template
typename's. because compiler can't determine std::function<void(T)> if I
provide [](T value) {} in function call, don't know why.