But set_cache_control also accepts Strings or raw CacheControl as input.  Also, checking validity on input, not raising errors on to_s, and having CacheControl check for the void case aren't consistent.

I lean towards saying that if a developer builds an empty CC header, that's their lookout.