}
var min int // minimum number of arguments
- switch optype(T).(type) {
+ switch singleUnder(T).(type) {
case *Slice:
min = 2
case *Map, *Chan:
min = 1
- case *top:
- check.invalidArg(arg0, _InvalidMake, "cannot make %s; type parameter has no structural type", arg0)
+ case nil:
+ check.errorf(arg0, _InvalidMake, "cannot make %s; type set has no single underlying type", arg0)
return
default:
check.invalidArg(arg0, _InvalidMake, "cannot make %s; type must be slice, map, or channel", arg0)
// make
+type myChan chan int
+
func _[
- S1 interface{ []int },
- S2 interface{ []int | chan int },
+ S1 ~[]int,
+ S2 ~[]int | ~chan int,
- M1 interface{ map[string]int },
- M2 interface{ map[string]int | chan int },
+ M1 ~map[string]int,
+ M2 ~map[string]int | ~chan int,
- C1 interface{ chan int },
- C2 interface{ chan int | chan string },
+ C1 ~chan int,
+ C2 ~chan int | ~chan string,
+ C3 chan int | myChan, // single underlying type
]() {
type S0 []int
_ = make([]int, 10)
_ = make /* ERROR expects 2 or 3 arguments */ (S1)
_ = make(S1, 10, 20)
_ = make /* ERROR expects 2 or 3 arguments */ (S1, 10, 20, 30)
- _ = make(S2 /* ERROR cannot make .* no structural type */ , 10)
+ _ = make(S2 /* ERROR cannot make .* no single underlying type */ , 10)
type M0 map[string]int
_ = make(map[string]int)
_ = make(M1)
_ = make(M1, 10)
_ = make/* ERROR expects 1 or 2 arguments */(M1, 10, 20)
- _ = make(M2 /* ERROR cannot make .* no structural type */ )
+ _ = make(M2 /* ERROR cannot make .* no single underlying type */ )
type C0 chan int
_ = make(chan int)
_ = make(C1)
_ = make(C1, 10)
_ = make/* ERROR expects 1 or 2 arguments */(C1, 10, 20)
- _ = make(C2 /* ERROR cannot make .* no structural type */ )
+ _ = make(C2 /* ERROR cannot make .* no single underlying type */ )
+ _ = make(C3)
}
// unsafe.Alignof