| // compile | |
| // 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. | |
| // Testing composite literal for a type param constrained to be a struct or a map. | |
| package p | |
| type C interface { | |
| ~struct{ b1, b2 string } | |
| } | |
| func f[T C]() T { | |
| return T{ | |
| b1: "a", | |
| b2: "b", | |
| } | |
| } | |
| func f2[T ~struct{ b1, b2 string }]() T { | |
| return T{ | |
| b1: "a", | |
| b2: "b", | |
| } | |
| } | |
| type D interface { | |
| map[string]string | S | |
| } | |
| type S map[string]string | |
| func g[T D]() T { | |
| b1 := "foo" | |
| b2 := "bar" | |
| return T{ | |
| b1: "a", | |
| b2: "b", | |
| } | |
| } | |
| func g2[T map[string]string]() T { | |
| b1 := "foo" | |
| b2 := "bar" | |
| return T{ | |
| b1: "a", | |
| b2: "b", | |
| } | |
| } | |
| func g3[T S]() T { | |
| b1 := "foo" | |
| b2 := "bar" | |
| return T{ | |
| b1: "a", | |
| b2: "b", | |
| } | |
| } |