mirror of
https://github.com/golang/go
synced 2024-10-14 11:53:56 +00:00
71 lines
914 B
Go
71 lines
914 B
Go
|
// run
|
||
|
|
||
|
// Copyright 2022 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
|
||
|
|
||
|
func main() {}
|
||
|
|
||
|
type Sf struct {
|
||
|
f int
|
||
|
}
|
||
|
|
||
|
func f0[P Sf](p P) {
|
||
|
_ = p.f
|
||
|
p.f = 0
|
||
|
}
|
||
|
|
||
|
func f0t[P ~struct{ f int }](p P) {
|
||
|
_ = p.f
|
||
|
p.f = 0
|
||
|
}
|
||
|
|
||
|
// TODO(danscales) enable once the compiler is fixed
|
||
|
// var _ = f0[Sf]
|
||
|
// var _ = f0t[Sf]
|
||
|
|
||
|
func f1[P interface {
|
||
|
Sf
|
||
|
m()
|
||
|
}](p P) {
|
||
|
_ = p.f
|
||
|
p.f = 0
|
||
|
p.m()
|
||
|
}
|
||
|
|
||
|
type Sm struct{}
|
||
|
|
||
|
func (Sm) m() {}
|
||
|
|
||
|
type Sfm struct {
|
||
|
f int
|
||
|
}
|
||
|
|
||
|
func (Sfm) m() {}
|
||
|
|
||
|
func f2[P interface {
|
||
|
Sfm
|
||
|
m()
|
||
|
}](p P) {
|
||
|
_ = p.f
|
||
|
p.f = 0
|
||
|
p.m()
|
||
|
}
|
||
|
|
||
|
// TODO(danscales) enable once the compiler is fixed
|
||
|
// var _ = f2[Sfm]
|
||
|
|
||
|
// special case: structural type is a named pointer type
|
||
|
|
||
|
type PSfm *Sfm
|
||
|
|
||
|
func f3[P interface{ PSfm }](p P) {
|
||
|
_ = p.f
|
||
|
p.f = 0
|
||
|
}
|
||
|
|
||
|
// TODO(danscales) enable once the compiler is fixed
|
||
|
// var _ = f3[PSfm]
|