github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/types/testdata/check/typeinst0.go (about) 1 // Copyright 2019 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 p 6 7 type myInt int 8 9 // Parameterized type declarations 10 11 // For now, a lone type parameter is not permitted as RHS in a type declaration (issue #45639). 12 type T1[P any] P // ERROR "cannot use a type parameter as RHS in type declaration" 13 14 type T2[P any] struct { 15 f P 16 g int // int should still be in scope chain 17 } 18 19 type List[P any] []P 20 21 // Alias type declarations cannot have type parameters. 22 // Issue #46477 proposes to change that. 23 type A1[P any] = /* ERROR "cannot be alias" */ struct{} 24 25 // Pending clarification of #46477 we disallow aliases 26 // of generic types. 27 type A2 = List // ERROR "cannot use generic type" 28 var _ A2[int] 29 var _ A2 30 31 type A3 = List[int] 32 var _ A3 33 34 // Parameterized type instantiations 35 36 var x int 37 type _ x /* ERROR "not a type" */ [int] 38 39 type _ int /* ERROR "not a generic type" */ [] // ERROR "expected type argument list" 40 type _ myInt /* ERROR "not a generic type" */ [] // ERROR "expected type argument list" 41 42 // TODO(gri) better error messages 43 type _ T1[] // ERROR "expected type argument list" 44 type _ T1[x /* ERROR "not a type" */ ] 45 type _ T1 /* ERROR "too many type arguments for type T1: have 2, want 1" */ [int, float32] 46 47 var _ T2[int] = T2[int]{} 48 49 var _ List[int] = []int{1, 2, 3} 50 var _ List[[]int] = [][]int{{1, 2, 3}} 51 var _ List[List[List[int]]] 52 53 // Parameterized types containing parameterized types 54 55 type T3[P any] List[P] 56 57 var _ T3[int] = T3[int](List[int]{1, 2, 3}) 58 59 // Self-recursive generic types are not permitted 60 61 type self1[P any] self1 /* ERROR "invalid recursive type" */ [P] 62 type self2[P any] *self2[P] // this is ok