|  | // 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", | 
|  | } | 
|  | } |