new file:   is_functional.hpp