// 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 p type T[P any] struct{} func _(x interface{}) { switch x.(type) { case nil: case int: case T[int]: case []T[int]: case [10]T[int]: case struct{T[int]}: case *T[int]: case func(T[int]): case interface{m(T[int])}: case map[T[int]] string: case chan T[int]: case T /* ERROR cannot use generic type T\[P any\] without instantiation */ : case []T /* ERROR cannot use generic type */ : case [10]T /* ERROR cannot use generic type */ : case struct{T /* ERROR cannot use generic type */ }: case *T /* ERROR cannot use generic type */ : case func(T /* ERROR cannot use generic type */ ): case interface{m(T /* ERROR cannot use generic type */ )}: case map[T /* ERROR cannot use generic type */ ] string: case chan T /* ERROR cannot use generic type */ : case T /* ERROR cannot use generic type */ , *T /* ERROR cannot use generic type */ : } } // Make sure a parenthesized nil is ok. func _(x interface{}) { switch x.(type) { case ((nil)), int: } } // Make sure we look for the predeclared nil. func _(x interface{}) { type nil int switch x.(type) { case nil: // ok - this is the type nil } } func _(x interface{}) { var nil int switch x.(type) { case nil /* ERROR not a type */ : // not ok - this is the variable nil } }