// 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 p func f[_ comparable]() {} type S1 struct{ x int } type S2 struct{ x any } type S3 struct{ x [10]interface{ m() } } func _[P1 comparable, P2 S2]() { _ = f[S1] _ = f[S2] _ = f[S3] type L1 struct { x P1 } type L2 struct { x P2 } _ = f[L1] _ = f[L2 /* ERROR "L2 does not satisfy comparable" */ ] } // example from issue type Set[T comparable] map[T]struct{} func NewSetFromSlice[T comparable](items []T) *Set[T] { s := Set[T]{} for _, item := range items { s[item] = struct{}{} } return &s } type T struct{ x any } func main() { NewSetFromSlice([]T{ {"foo"}, {5}, }) }