// 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.

// Embedding of stand-alone type parameters is not permitted.

package p

type (
        _[P any] interface{ *P | []P | chan P | map[string]P }
        _[P any] interface{ P /* ERROR term cannot be a type parameter */ }
        _[P any] interface{ ~P /* ERROR type in term ~P cannot be a type parameter */ }
        _[P any] interface{ int | P /* ERROR term cannot be a type parameter */ }
        _[P any] interface{ int | ~P /* ERROR type in term ~P cannot be a type parameter */ }
)

func _[P any]() {
        type (
                _[P any] interface{ *P | []P | chan P | map[string]P }
                _[P any] interface{ P /* ERROR term cannot be a type parameter */ }
                _[P any] interface{ ~P /* ERROR type in term ~P cannot be a type parameter */ }
                _[P any] interface{ int | P /* ERROR term cannot be a type parameter */ }
                _[P any] interface{ int | ~P /* ERROR type in term ~P cannot be a type parameter */ }

                _ interface{ *P | []P | chan P | map[string]P }
                _ interface{ P /* ERROR term cannot be a type parameter */ }
                _ interface{ ~P /* ERROR type in term ~P cannot be a type parameter */ }
                _ interface{ int | P /* ERROR term cannot be a type parameter */ }
                _ interface{ int | ~P /* ERROR type in term ~P cannot be a type parameter */ }
        )
}

func _[P any, Q interface{ *P | []P | chan P | map[string]P }]() {}
func _[P any, Q interface{ P /* ERROR term cannot be a type parameter */ }]() {}
func _[P any, Q interface{ ~P /* ERROR type in term ~P cannot be a type parameter */ }]() {}
func _[P any, Q interface{ int | P /* ERROR term cannot be a type parameter */ }]() {}
func _[P any, Q interface{ int | ~P /* ERROR type in term ~P cannot be a type parameter */ }]() {}
