It's an interesting idea… but also keep in mind that CoW is not exactly a contract that needs to be visible externally… it's an implementation choice on the part of the infra engineer. And some types that do CoW on "large" values might choose to save "small" values on the stack as a performance optimization. So a type like Data might not always have the ability to return a storageID.