1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package typeInference 6 7 // As of issue #51527, type-type inference has been disabled. 8 9 // basic inference 10 type Tb[P ~*Q, Q any] int 11 12 func _() { 13 var x Tb /* ERROR "not enough type arguments for type Tb: have 1, want 2" */ [*int] 14 var y Tb[*int, int] 15 x = y /* ERRORx `cannot use y .* in assignment` */ 16 _ = x 17 } 18 19 // recursive inference 20 type Tr[A any, B *C, C *D, D *A] int 21 22 func _() { 23 var x Tr /* ERROR "not enough type arguments for type Tr: have 1, want 4" */ [string] 24 var y Tr[string, ***string, **string, *string] 25 var z Tr[int, ***int, **int, *int] 26 x = y /* ERRORx `cannot use y .* in assignment` */ 27 x = z // ERRORx `cannot use z .* as Tr` 28 _ = x 29 } 30 31 // other patterns of inference 32 type To0[A any, B []A] int 33 type To1[A any, B struct{ a A }] int 34 type To2[A any, B [][]A] int 35 type To3[A any, B [3]*A] int 36 type To4[A any, B any, C struct { 37 a A 38 b B 39 }] int 40 41 func _() { 42 var _ To0 /* ERROR "not enough type arguments for type To0: have 1, want 2" */ [int] 43 var _ To1 /* ERROR "not enough type arguments for type To1: have 1, want 2" */ [int] 44 var _ To2 /* ERROR "not enough type arguments for type To2: have 1, want 2" */ [int] 45 var _ To3 /* ERROR "not enough type arguments for type To3: have 1, want 2" */ [int] 46 var _ To4 /* ERROR "not enough type arguments for type To4: have 2, want 3" */ [int, string] 47 } 48 49 // failed inference 50 type Tf0[A, B any] int 51 type Tf1[A any, B ~struct { 52 a A 53 c C 54 }, C any] int 55 56 func _() { 57 var _ Tf0 /* ERROR "not enough type arguments for type Tf0: have 1, want 2" */ [int] 58 var _ Tf1 /* ERROR "not enough type arguments for type Tf1: have 1, want 3" */ [int] 59 } 60