| // Copyright 2021 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import "fmt" |
| |
| func main() { |
| m := map[string]int{ |
| "a": 6, |
| "b": 7, |
| } |
| fmt.Println(copyMap[map[string]int, string, int](m)) |
| } |
| |
| type Map[K comparable, V any] interface { |
| map[K] V |
| } |
| |
| func copyMap[M Map[K, V], K comparable, V any](m M) M { |
| m1 := make(M) |
| for k, v := range m { |
| m1[k] = v |
| } |
| return m1 |
| } |
| |
| // simpler test case from the same issue |
| |
| type A[X comparable] interface { |
| []X |
| } |
| |
| func f[B A[X], X comparable]() B { |
| return nil |
| } |