S in your example represents $Storage not the wrapped type and there is no synthesis of Hashable, Equatable etc. yet as I mentioned in my previous comment.
Applying type wrapper to a protocol does two things:
- Injects
associatedtype $Storageandvar $_storage: OnlyAppliesToHashable<Self.$Storage> - Allows it infer
@OnlyAppliesToHashablefrom conformance toNotExplicitlyHashable
Yes, there are no limitations to subscript besides that it has to have storageKeyPath that accepts a key path.