| // 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 p |
| |
| func f1[P int | string]() {} |
| func f2[P ~int | string | float64]() {} |
| func f3[P int](x P) {} |
| |
| type myInt int |
| type myFloat float64 |
| |
| func _() { |
| _ = f1[int] |
| _ = f1[myInt /* ERROR "possibly missing ~ for int in int | string" */] |
| _ = f2[myInt] |
| _ = f2[myFloat /* ERROR "possibly missing ~ for float64 in ~int | string | float64" */] |
| var x myInt |
| f3 /* ERROR "myInt does not satisfy int (possibly missing ~ for int in int)" */ (x) |
| } |
| |
| // test case from the issue |
| |
| type SliceConstraint[T any] interface { |
| []T |
| } |
| |
| func Map[S SliceConstraint[E], E any](s S, f func(E) E) S { |
| return s |
| } |
| |
| type MySlice []int |
| |
| func f(s MySlice) { |
| Map[MySlice /* ERROR "MySlice does not satisfy SliceConstraint[int] (possibly missing ~ for []int in SliceConstraint[int])" */, int](s, nil) |
| } |