1. For FilePath, the reason is, the class template is instantiated precisely when the full definition of a specialization is required. If remove the include of "base/files/file_path.h", compiler will not get the full definition of base::FailPath. The new type "std::map<std::string, base::FilePath>" cannot create correctly. When I remove this include, compiler complains "invalid use of incomplete type".
2. "base/lazy_instance.h" and "base/macros.h" are removed