| // run | |
| // Copyright 2014 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 | |
| import ( | |
| "fmt" | |
| ) | |
| type Foo int64 | |
| func (f *Foo) F() int64 { | |
| return int64(*f) | |
| } | |
| type Bar int64 | |
| func (b Bar) F() int64 { | |
| return int64(b) | |
| } | |
| type Baz int32 | |
| func (b Baz) F() int64 { | |
| return int64(b) | |
| } | |
| func main() { | |
| foo := Foo(123) | |
| f := foo.F | |
| if foo.F() != f() { | |
| bug() | |
| fmt.Println("foo.F", foo.F(), f()) | |
| } | |
| bar := Bar(123) | |
| f = bar.F | |
| if bar.F() != f() { | |
| bug() | |
| fmt.Println("bar.F", bar.F(), f()) // duh! | |
| } | |
| baz := Baz(123) | |
| f = baz.F | |
| if baz.F() != f() { | |
| bug() | |
| fmt.Println("baz.F", baz.F(), f()) | |
| } | |
| } | |
| var bugged bool | |
| func bug() { | |
| if !bugged { | |
| bugged = true | |
| fmt.Println("BUG") | |
| } | |
| } |