| // 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") |
| } |
| } |