| package p |
| |
| //// Generics |
| |
| // old |
| type G[T any] []T |
| |
| // new |
| // OK: param name change |
| type G[A any] []A |
| |
| // old |
| type GM[A, B comparable] map[A]B |
| |
| // new |
| // i GM: changed from map[A]B to map[B]A |
| type GM[A, B comparable] map[B]A |
| |
| // old |
| type GT[V any] struct { |
| } |
| |
| func (GT[V]) M(*GT[V]) {} |
| |
| // new |
| // OK |
| type GT[V any] struct { |
| } |
| |
| func (GT[V]) M(*GT[V]) {} |
| |
| // old |
| type GT2[V any] struct { |
| } |
| |
| func (GT2[V]) M(*GT2[V]) {} |
| |
| // new |
| // i GT2: changed from GT2[V any] to GT2[V comparable] |
| type GT2[V comparable] struct { |
| } |
| |
| func (GT2[V]) M(*GT2[V]) {} |
| |
| // both |
| type custom interface { |
| int |
| } |
| |
| type GT3[E custom] map[E]int |
| |
| // Instantiated types: |
| // Two instantiations of generic types |
| // with different type parameters are different. |
| |
| // both |
| type H[T any] []T |
| |
| // old |
| var V1 H[int] |
| |
| type T int |
| |
| var V2 H[T] |
| |
| // new |
| // i V1: changed from H[int] to H[bool] |
| var V1 H[bool] |
| |
| // i T: changed from int to bool |
| type T bool |
| |
| // OK: we reported on T, so we don't need to here. |
| var V2 H[T] |
| |
| // old |
| type t int |
| |
| // new |
| // i t: changed from int to byte |
| type t byte |
| |
| // both |
| var V3 H[t] |