-
Notifications
You must be signed in to change notification settings - Fork 10.6k
Closed
Labels
bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.A deviation from expected or documented behavior. Also: expected but undesirable behavior.
Description
| Previous ID | SR-12980 |
| Radar | rdar://problem/88514540 |
| Original Reporter | @jepers |
| Type | Bug |
| Status | Resolved |
| Resolution | Done |
Additional Detail from JIRA
| Votes | 1 |
| Component/s | |
| Labels | Bug |
| Assignee | None |
| Priority | Medium |
md5: ffff7ab8fd7dbc98f69de8dba225a412
Issue Description:
This program compiles as expected:
protocol VectorIndex {}
protocol Vector {
associatedtype Element
associatedtype Index: VectorIndex
subscript(index: Index) -> Element { get set }
init(_ indexToElementMapping: (Index) -> Element)
}
// Some methods for square matrices:
extension Vector where
Self.Element: Vector,
Self.Index == Self.Element.Index,
Self.Element.Element: BinaryFloatingPoint
{
func row(_ index: Index) -> Element { self[index] }
func column(_ index: Index) -> Element { Element { self[$0][index] } }
}
But note that if we make VectorIndex inherit/refine CaseIterable, like so:
protocol VectorIndex: CaseIterable {}
The program will no longer compile, because:
error: cannot convert value of type 'Self.Element.Index' (associated type of protocol 'Vector') to expected argument type 'Self.Index' (associated type of protocol 'Vector')
ie, it seems like the constraint Self.Index == Self.Element.Index is now being ignored.
Metadata
Metadata
Assignees
Labels
bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.A deviation from expected or documented behavior. Also: expected but undesirable behavior.