// $G $D/$F.go && $L $F.$A && ./$A.out | |
// 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 { | |
panicln("*T1", ok1, ok2, ok3); | |
} | |
} | |
{ | |
var i interface{} = MyInt(0); | |
_, ok1 := i.(interface{ m(*T1) }); | |
_, ok2 := i.(interface{ m(*T2) }); | |
_, ok3 := i.(interface{ m(*T3) }); | |
if !ok1 || ok2 || ok3 { | |
panicln("T", ok1, ok2, ok3); | |
} | |
} | |
} | |