// Copyright 2021 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 P type A1[T any] struct{} func (*A1[T]) m1(T) {} type A2[T any] interface { m2(T) } type B1[T any] struct { filler int *A1[T] A2[T] } type B2[T any] interface { A2[T] } type C[T any] struct { filler1 int filler2 int B1[T] } type D[T any] struct { filler1 int filler2 int filler3 int C[T] } func _() { // calling embedded methods var b1 B1[string] b1.A1.m1("") b1.m1("") b1.A2.m2("") b1.m2("") var b2 B2[string] b2.m2("") // a deeper nesting var d D[string] d.m1("") d.m2("") // calling method expressions m1x := B1[string].m1 m1x(b1, "") m2x := B2[string].m2 m2x(b2, "") // calling method values m1v := b1.m1 m1v("") m2v := b1.m2 m2v("") b2v := b2.m2 b2v("") } // actual test case from issue type A[T any] struct{} func (*A[T]) f(T) {} type B[T any] struct{ A[T] } func _() { var b B[string] b.A.f("") b.f("") }