// 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. /* import "fmt" type MyStruct struct { b1, b2 string E } type E struct { val int } type C interface { ~struct { b1, b2 string E } } func f[T C]() T { var x T = T{ b1: "a", b2: "b", } if got, want := x.b2, "b"; got != want { panic(fmt.Sprintf("got %d, want %d", got, want)) } x.b1 = "y" x.val = 5 return x } func main() { x := f[MyStruct]() if got, want := x.b1, "y"; got != want { panic(fmt.Sprintf("got %d, want %d", got, want)) } if got, want := x.val, 5; got != want { panic(fmt.Sprintf("got %d, want %d", got, want)) } } */