...
1
2
3
4
5 package p
6
7 func f[_ comparable]() {}
8
9 type S1 struct{ x int }
10 type S2 struct{ x any }
11 type S3 struct{ x [10]interface{ m() } }
12
13 func _[P1 comparable, P2 S2]() {
14 _ = f[S1]
15 _ = f[S2]
16 _ = f[S3]
17
18 type L1 struct { x P1 }
19 type L2 struct { x P2 }
20 _ = f[L1]
21 _ = f[L2 ]
22 }
23
24
25
26
27 type Set[T comparable] map[T]struct{}
28
29 func NewSetFromSlice[T comparable](items []T) *Set[T] {
30 s := Set[T]{}
31
32 for _, item := range items {
33 s[item] = struct{}{}
34 }
35
36 return &s
37 }
38
39 type T struct{ x any }
40
41 func main() {
42 NewSetFromSlice([]T{
43 {"foo"},
44 {5},
45 })
46 }
47
View as plain text