1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package p 6 7 // The following is OK, per the special handling for type literals discussed in issue #49482. 8 type _[P *struct{}] struct{} 9 type _[P *int,] int 10 type _[P (*int),] int 11 12 const P = 2 // declare P to avoid noisy 'undefined' errors below. 13 14 // The following parse as invalid array types due to parsing ambiguitiues. 15 type _ [P *int /* ERROR "int (type) is not an expression" */ ]int 16 type _ [P /* ERROR "non-function P" */ (*int)]int 17 18 // Adding a trailing comma or an enclosing interface resolves the ambiguity. 19 type _[P *int,] int 20 type _[P (*int),] int 21 type _[P interface{*int}] int 22 type _[P interface{(*int)}] int 23 24 // The following parse correctly as valid generic types. 25 type _[P *struct{} | int] struct{} 26 type _[P *struct{} | ~int] struct{} 27