// 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() {} // Field accesses through type parameters are disabled // until we have a more thorough understanding of the // implications on the spec. See issue #51576. /* 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 } var _ = f0[Sf] var _ = f0t[Sf] func f1[P interface { ~struct{ f int } m() }](p P) { _ = p.f p.f = 0 p.m() } var _ = f1[Sfm] 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() } var _ = f2[Sfm] // special case: core type is a named pointer type type PSfm *Sfm func f3[P interface{ PSfm }](p P) { _ = p.f p.f = 0 } var _ = f3[PSfm] // special case: core type is an unnamed pointer type func f4[P interface{ *Sfm }](p P) { _ = p.f p.f = 0 } var _ = f4[*Sfm] type A int type B int type C float64 type Int interface { *Sf | A *Sf | B } func f5[P Int](p P) { _ = p.f p.f = 0 } var _ = f5[*Sf] type Int2 interface { *Sf | A any *Sf | C } func f6[P Int2](p P) { _ = p.f p.f = 0 } var _ = f6[*Sf] type Int3 interface { Sf ~struct{ f int } } func f7[P Int3](p P) { _ = p.f p.f = 0 } var _ = f7[Sf] type Em1 interface { *Sf | A } type Em2 interface { *Sf | B } type Int4 interface { Em1 Em2 any } func f8[P Int4](p P) { _ = p.f p.f = 0 } var _ = f8[*Sf] */