| // errorcheck | |
| // 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. | |
| // Basic type parameter list type-checking (not syntax) errors. | |
| package tparam1 | |
| // The predeclared identifier "any" may be used in place of interface{}. | |
| var _ any | |
| func _(_ any) | |
| type _[_ any] struct{} | |
| const N = 10 | |
| type ( | |
| _ []struct{} // slice | |
| _ [N]struct{} // array | |
| _[T any] struct{} | |
| _[T, T any] struct{} // ERROR "T redeclared" | |
| _[T1, T2 any, T3 any] struct{} | |
| ) | |
| func _[T any]() {} | |
| func _[T, T any]() {} // ERROR "T redeclared" | |
| func _[T1, T2 any](x T1) T2 { panic(0) } | |
| // Type parameters are visible from opening [ to end of function. | |
| type C interface{} | |
| func _[T interface{}]() {} | |
| func _[T C]() {} | |
| func _[T struct{}]() {} // ok if #48424 is accepted | |
| func _[T interface{ m() T }]() {} | |
| func _[T1 interface{ m() T2 }, T2 interface{ m() T1 }]() { | |
| var _ T1 | |
| } | |
| // TODO(gri) expand this |