Add functional and smart_ptr