// Tests of type asserts.
// Requires type parameters.
package typeassert
type fooer interface{ foo() string }
type X int
func (_ X) foo() string { return "x" }
func f[T fooer](x T) func() string {
return x.foo
}
func main() {
if f[X](0)() != "x" {
panic("f[X]() != 'x'")
}
p := false
func() {
defer func() {
if recover() != nil {
p = true
}
}()
f[fooer](nil) // panics on x.foo when T is an interface and nil.
}()
if !p {
panic("f[fooer] did not panic")
}
}