| // compile | |
| // 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 checks simple code using type parameters. | |
| package smoketest | |
| // type parameters for functions | |
| func f1[P any]() {} | |
| func f2[P1, P2 any, P3 any]() {} | |
| func f3[P interface{}](x P, y T1[int]) {} | |
| // function instantiations | |
| var _ = f1[int] | |
| var _ = f2[int, string, struct{}] | |
| var _ = f3[bool] | |
| // type parameters for types | |
| type T1[P any] struct{} | |
| type T2[P1, P2 any, P3 any] struct{} | |
| type T3[P interface{}] interface{} | |
| // type instantiations | |
| type _ T1[int] | |
| type _ T2[int, string, struct{}] | |
| type _ T3[bool] | |
| // methods | |
| func (T1[P]) m1() {} | |
| func (T1[_]) m2() {} | |
| func (x T2[P1, P2, P3]) m() {} | |
| // type lists | |
| type _ interface { | |
| m1() | |
| m2() | |
| int | float32 | string | |
| m3() | |
| } | |
| // embedded instantiated types | |
| type _ struct { | |
| f1, f2 int | |
| T1[int] | |
| T2[int, string, struct{}] | |
| T3[bool] | |
| } | |
| type _ interface { | |
| m1() | |
| m2() | |
| T3[bool] | |
| } |