// +build ignore

// This is a slice of the fmt package.

package main

type pp struct {
	field interface{}
}

func newPrinter() *pp {
	return new(pp)
}

func Fprintln(a ...interface{}) {
	p := newPrinter()
	p.doPrint(a, true, true)
}

func Println(a ...interface{}) {
	Fprintln(a...)
}

func (p *pp) doPrint(a []interface{}, addspace, addnewline bool) {
	print(a[0]) // @types S | string
	stringer := a[0].(interface {
		String() string
	})

	stringer.String()
	print(stringer) // @types S
}

type S int

func (S) String() string { return "" }

func main() {
	Println("Hello, World!", S(0))
}

// @calls (*main.pp).doPrint -> (main.S).String
