improve is_iterator type trait