Swift 3, playground
If a generic specifies <T: SomeProtocol>, you cannot pass in an object with type SomeProtocol. This doesn't make sense since presumably, a type should conform to itself.
To reproduce, put this in a playground:
Expected: Compilation succeeds
Actual: Compilation failed