| // Copyright 2023 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(func(int)) |
| func f2(func(int), func(string)) |
| func f3(func(int), func(string), func(float32)) |
| |
| func g1[P any](P) {} |
| |
| func _() { |
| f1(g1) |
| f2(g1, g1) |
| f3(g1, g1, g1) |
| } |
| |
| // More complex examples |
| |
| func g2[P any](P, P) {} |
| func h3[P any](func(P), func(P), func() P) {} |
| func h4[P, Q any](func(P), func(P, Q), func() Q, func(P, Q)) {} |
| |
| func r1() int { return 0 } |
| |
| func _() { |
| h3(g1, g1, r1) |
| h4(g1, g2, r1, g2) |
| } |
| |
| // Variadic cases |
| |
| func f(func(int)) |
| func g[P any](P) {} |
| |
| func d[P any](...func(P)) {} |
| |
| func _() { |
| d /* ERROR "cannot infer P" */ () |
| d(f) |
| d(f, g) |
| d(f, g, g) |
| d /* ERROR "cannot infer P" */ (g, g, g) |
| d(g, g, f) |
| d(g, f, g, f) |
| } |