// 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. // Field accesses through type parameters are disabled // until we have a more thorough understanding of the // implications on the spec. See issue #51576. package p type Sf struct { f int } func f0[P Sf](p P) { _ = p.f // ERROR "p.f undefined" p.f /* ERROR "p.f undefined" */ = 0 } func f0t[P ~struct{f int}](p P) { _ = p.f // ERROR "p.f undefined" p.f /* ERROR "p.f undefined" */ = 0 } var _ = f0[Sf] var _ = f0t[Sf] var _ = f0[Sm /* ERROR "does not satisfy" */ ] var _ = f0t[Sm /* ERROR "does not satisfy" */ ] func f1[P interface{ Sf; m() }](p P) { _ = p.f // ERROR "p.f undefined" p.f /* ERROR "p.f undefined" */ = 0 p.m() } var _ = f1[Sf /* ERROR "missing method m" */ ] var _ = f1[Sm /* ERROR "does not satisfy" */ ] type Sm struct {} func (Sm) m() {} type Sfm struct { f int } func (Sfm) m() {} func f2[P interface{ Sfm; m() }](p P) { _ = p.f // ERROR "p.f undefined" p.f /* ERROR "p.f undefined" */ = 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 // ERROR "p.f undefined" p.f /* ERROR "p.f undefined" */ = 0 p.m /* ERROR "type P has no field or method m" */ () } var _ = f3[PSfm]