// run // 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. // Test cases where a main dictionary is needed inside a generic function/method, because // we are calling a method on a fully-instantiated type or a fully-instantiated function. // (probably not common situations, of course) package main import ( "fmt" ) type C comparable type value[T C] struct { val T } func (v *value[T]) test(def T) bool { return (v.val == def) } func (v *value[T]) get(def T) T { var c value[int] if c.test(32) { return def } else if v.test(def) { return def } else { return v.val } } func main() { var s value[string] if got, want := s.get("ab"), ""; got != want { panic(fmt.Sprintf("get() == %d, want %d", got, want)) } }