| // Copyright 2020 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. | |
| // This file contains basic generic code snippets. | |
| package p | |
| // type parameter lists | |
| type B[P any] struct{} | |
| type _[P interface{}] struct{} | |
| type _[P B] struct{} | |
| type _[P B[P]] struct{} | |
| type _[A, B, C any] struct{} | |
| type _[A, B, C B] struct{} | |
| type _[A, B, C B[A, B, C]] struct{} | |
| type _[A1, A2 B1, A3 B2, A4, A5, A6 B3] struct{} | |
| type _[A interface{}] struct{} | |
| type _[A, B interface{ m() }] struct{} | |
| type _[A, B, C any] struct{} | |
| // in functions | |
| func _[P any]() | |
| func _[P interface{}]() | |
| func _[P B]() | |
| func _[P B[P]]() | |
| // type instantiations | |
| type _ T[int] | |
| // in expressions | |
| var _ = T[int]{} | |
| // in embedded types | |
| type _ struct{ T[int] } | |
| // interfaces | |
| type _ interface { | |
| m() | |
| ~int | |
| } | |
| type _ interface { | |
| ~int | ~float | ~string | |
| ~complex128 | |
| underlying(underlying underlying) underlying | |
| } | |
| type _ interface { | |
| T | |
| T[int] | |
| } | |
| // tricky cases | |
| func _(T[P], T[P1, P2]) | |
| func _(a [N]T) | |
| type _ struct { | |
| T[P] | |
| T[P1, P2] | |
| f[N] | |
| } | |
| type _ interface { | |
| m() | |
| // instantiated types | |
| T[ /* ERROR empty type argument list */ ] | |
| T[P] | |
| T[P1, P2] | |
| } | |