| // 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)) |
| } |
| |
| } |