| // run |
| |
| // Copyright 2022 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 |
| |
| func f[T comparable](i any) { |
| var t T |
| |
| switch i { |
| case t: |
| // ok |
| default: |
| println("FAIL: switch i") |
| } |
| |
| switch t { |
| case i: |
| // ok |
| default: |
| println("FAIL: switch t") |
| } |
| } |
| |
| type myint int |
| |
| func (m myint) foo() { |
| } |
| |
| type fooer interface { |
| foo() |
| } |
| |
| type comparableFoo interface { |
| comparable |
| foo() |
| } |
| |
| func g[T comparableFoo](i fooer) { |
| var t T |
| |
| switch i { |
| case t: |
| // ok |
| default: |
| println("FAIL: switch i") |
| } |
| |
| switch t { |
| case i: |
| // ok |
| default: |
| println("FAIL: switch t") |
| } |
| } |
| |
| func main() { |
| f[int](0) |
| g[myint](myint(0)) |
| } |