// run | |
// Copyright 2009 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 | |
type T1 struct { | |
x, y int | |
} | |
type T2 struct { | |
z, w byte | |
} | |
type T3 T1 | |
type MyInt int | |
func (MyInt) m(*T1) {} | |
func main() { | |
{ | |
var i interface{} = new(T1) | |
_, ok1 := i.(*T1) | |
_, ok2 := i.(*T2) | |
_, ok3 := i.(*T3) | |
if !ok1 || ok2 || ok3 { | |
println("*T1", ok1, ok2, ok3) | |
panic("fail") | |
} | |
} | |
{ | |
var i interface{} = MyInt(0) | |
_, ok1 := i.(interface { | |
m(*T1) | |
}) | |
_, ok2 := i.(interface { | |
m(*T2) | |
}) | |
_, ok3 := i.(interface { | |
m(*T3) | |
}) | |
if !ok1 || ok2 || ok3 { | |
println("T", ok1, ok2, ok3) | |
panic("fail") | |
} | |
} | |
} |