| // run | |
| // Copyright 2021 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. | |
| package main | |
| type I interface{} | |
| type _S[T any] struct { | |
| x *T | |
| } | |
| // F is a non-generic function, but has a type _S[I] which is instantiated from a | |
| // generic type. Test that _S[I] is successfully exported. | |
| func F() { | |
| v := _S[I]{} | |
| if v.x != nil { | |
| panic(v) | |
| } | |
| } | |
| // Testing the various combinations of method expressions. | |
| type S1 struct{} | |
| func (*S1) M() {} | |
| type S2 struct{} | |
| func (S2) M() {} | |
| func _F1[T interface{ M() }](t T) { | |
| _ = T.M | |
| } | |
| func F2() { | |
| _F1(&S1{}) | |
| _F1(S2{}) | |
| _F1(&S2{}) | |
| } | |
| func main() { | |
| F() | |
| F2() | |
| } |