2013-04-08 00:59:33 -06:00
|
|
|
// compile
|
|
|
|
|
2016-04-10 15:32:26 -06:00
|
|
|
// Copyright 2013 The Go Authors. All rights reserved.
|
2013-04-08 00:59:33 -06:00
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
// Issue 5231: method values lose their variadic property.
|
|
|
|
|
|
|
|
package p
|
|
|
|
|
|
|
|
type T int
|
|
|
|
|
|
|
|
func (t T) NotVariadic(s []int) int {
|
|
|
|
return int(t) + s[0]
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t T) Variadic(s ...int) int {
|
|
|
|
return int(t) + s[0]
|
|
|
|
}
|
|
|
|
|
|
|
|
type I interface {
|
|
|
|
NotVariadic(s []int) int
|
|
|
|
Variadic(s ...int) int
|
|
|
|
}
|
|
|
|
|
|
|
|
func F() {
|
|
|
|
var t T
|
|
|
|
var p *T = &t
|
|
|
|
var i I = p
|
|
|
|
|
|
|
|
nv := t.NotVariadic
|
|
|
|
nv = p.NotVariadic
|
|
|
|
nv = i.NotVariadic
|
|
|
|
var s int = nv([]int{1, 2, 3})
|
|
|
|
|
|
|
|
v := t.Variadic
|
|
|
|
v = p.Variadic
|
|
|
|
v = i.Variadic
|
|
|
|
s = v(1, 2, 3)
|
|
|
|
|
|
|
|
var f1 func([]int) int = nv
|
|
|
|
var f2 func(...int) int = v
|
|
|
|
|
|
|
|
_, _, _ = f1, f2, s
|
|
|
|
}
|