// Copyright 2020 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 generics

func _[A, B any](a A, b B) int	{}
func _[T any](x, y T) T

type T[P any] struct{}
type T[P1, P2, P3 any] struct{}

type T[P C] struct{}
type T[P1, P2, P3 C] struct{}

type T[P C[P]] struct{}
type T[P1, P2, P3 C[P1, P2, P3]] struct{}

func f[P any](x P)
func f[P1, P2, P3 any](x1 P1, x2 P2, x3 P3) struct{}

func f[P interface{}](x P)
func f[P1, P2, P3 interface {
	m1(P1)
	~P2 | ~P3
}](x1 P1, x2 P2, x3 P3) struct{}
func f[P any](T1[P], T2[P]) T3[P]

func (x T[P]) m()
func (T[P]) m(x T[P]) P

func _() {
	type _ []T[P]
	var _ []T[P]
	_ = []T[P]{}
}

// type constraint literals with elided interfaces
func _[P ~int, Q int | string]()	{}
func _[P struct{ f int }, Q *P]()	{}

// various potentially ambiguous type parameter lists (issue #49482)
type _[P *T,] struct{}
type _[P *T, _ any] struct{}
type _[P *T,] struct{}
type _[P *T, _ any] struct{}
type _[P T] struct{}
type _[P T, _ any] struct{}

type _[P *struct{}] struct{}
type _[P *struct{}] struct{}
type _[P []int] struct{}

// array type declarations
type _ [P(T)]struct{}
type _ [P((T))]struct{}
type _ [P * *T]struct{}
type _ [P * T]struct{}
type _ [P(*T)]struct{}
type _ [P(**T)]struct{}
type _ [P * T]struct{}
type _ [P*T - T]struct{}

type _[
	P *T,
] struct{}

// equivalent test cases for potentially ambiguous type parameter lists, except
// for function declarations there is no ambiguity (issue #51548)
func _[P *T]()		{}
func _[P *T, _ any]()	{}
func _[P *T]()		{}
func _[P *T, _ any]()	{}
func _[P T]()		{}
func _[P T, _ any]()	{}

func _[P *struct{}]()	{}
func _[P *struct{}]()	{}
func _[P []int]()	{}

func _[P T]()	{}
func _[P T]()	{}
func _[P **T]()	{}
func _[P *T]()	{}
func _[P *T]()	{}
func _[P **T]()	{}
func _[P *T]()	{}

func _[
	P *T,
]() {
}
