| // compile -G=1 |
| |
| // 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] |
| } |