// run -gcflags=-G=3 // 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 import ( "fmt" ) type Printer[T ~string] struct { PrintFn func(T) } func Print[T ~string](s T) { fmt.Println(s) } func PrintWithPrinter[T ~string, S ~struct { ID T PrintFn func(T) }](message T, obj S) { obj.PrintFn(message) } type PrintShop[T ~string] struct { ID T PrintFn func(T) } func main() { PrintWithPrinter( "Hello, world.", PrintShop[string]{ ID: "fake", PrintFn: Print[string], }, ) }