| // 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 | |
| import "fmt" | |
| type Temp[T any] struct { | |
| } | |
| var temp, temp1 any | |
| var ch any | |
| func (it Temp[T]) HasNext() bool { | |
| var ok bool | |
| temp1 = <-ch.(chan T) | |
| // test conversion of T to interface{} during an OAS2RECV | |
| temp, ok = <-ch.(chan T) | |
| return ok | |
| } | |
| type MyInt int | |
| func (i MyInt) String() string { | |
| return "a" | |
| } | |
| type Stringer interface { | |
| String() string | |
| } | |
| type Temp2[T Stringer] struct { | |
| } | |
| var temp2 Stringer | |
| func (it Temp2[T]) HasNext() string { | |
| var x map[int]T | |
| var ok bool | |
| // test conversion of T to Stringer during an OAS2MAPR | |
| temp2, ok = x[43] | |
| _ = ok | |
| return temp2.String() | |
| } | |
| func main() { | |
| ch1 := make(chan int, 2) | |
| ch1 <- 5 | |
| ch1 <- 6 | |
| ch = ch1 | |
| iter := Temp[int]{} | |
| iter.HasNext() | |
| iter2 := Temp2[MyInt]{} | |
| if got, want := iter2.HasNext(), "a"; got != want { | |
| panic(fmt.Sprintf("got %v, want %v", got, want)) | |
| } | |
| } |