| // 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)) |
| } |
| } |
| */ |