// $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 import "fmt" type Buffer int func (*Buffer) Read() { } type Reader interface { Read() } func f() *Buffer { return nil } func g() Reader { // implicit interface conversion in assignment during return return f() } func h() (b *Buffer, ok bool) { return } func i() (r Reader, ok bool) { // implicit interface conversion in multi-assignment during return return h(); } func fmter() (s string, i int, t string) { return "%#x %q", 100, "hello" } func main() { b := g(); bb, ok := b.(*Buffer); _, _, _ = b, bb, ok; b, ok = i(); bb, ok = b.(*Buffer); _, _, _ = b, bb, ok; s := fmt.Sprintf(fmter()); if s != "0x64 \"hello\"" { panicln(s); } }