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

// This file shows some examples of constraint literals with elided interfaces.
// These examples are permitted if proposal issue #48424 is accepted.

package p

// Constraint type sets of the form T, ~T, or A|B may omit the interface.
type (
	_[T int] struct{}
	_[T ~int] struct{}
	_[T int|string] struct{}
	_[T ~int|~string] struct{}
)

func min[T int|string](x, y T) T {
	if x < y {
		return x
	}
	return y
}

func lookup[M ~map[K]V, K comparable, V any](m M, k K) V {
	return m[k]
}

func deref[P ~*E, E any](p P) E {
	return *p
}

func _() int {
	p := new(int)
	return deref(p)
}

func addrOfCopy[V any, P ~*V](v V) P {
	return &v
}

func _() *int {
	return addrOfCopy(0)
}

// A type parameter may not be embedded in an interface;
// so it can also not be used as a constraint.
func _[A any, B A /* ERROR cannot use a type parameter as constraint */ ]() {}
func _[A any, B, C A /* ERROR cannot use a type parameter as constraint */ ]() {}


// Error messages refer to the type constraint as it appears in the source.
// (No implicit interface should be exposed.)
func _[T string](x T) T {
	return x /* ERROR constrained by string */ * x
}

func _[T int|string](x T) T {
	return x /* ERROR constrained by int|string */ * x
}
