close #1991
This commit is contained in:
parent
52377740b6
commit
f8c921dd25
1 changed files with 69 additions and 0 deletions
69
tests/concepts/tconcepts_overload_precedence.nim
Normal file
69
tests/concepts/tconcepts_overload_precedence.nim
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
discard """
|
||||||
|
ouput: '''x as ParameterizedType[T]
|
||||||
|
x as ParameterizedType[T]
|
||||||
|
x as ParameterizedType[T]
|
||||||
|
x as ParameterizedType
|
||||||
|
x as ParameterizedType
|
||||||
|
x as CustomTypeClass'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
type ParameterizedType[T] = object
|
||||||
|
|
||||||
|
type CustomTypeClass = concept
|
||||||
|
true
|
||||||
|
|
||||||
|
# 3 competing procs
|
||||||
|
proc a[T](x: ParameterizedType[T]) =
|
||||||
|
echo "x as ParameterizedType[T]"
|
||||||
|
|
||||||
|
proc a(x: ParameterizedType) =
|
||||||
|
echo "x as ParameterizedType"
|
||||||
|
|
||||||
|
proc a(x: CustomTypeClass) =
|
||||||
|
echo "x as CustomTypeClass"
|
||||||
|
|
||||||
|
# the same procs in different order
|
||||||
|
proc b(x: ParameterizedType) =
|
||||||
|
echo "x as ParameterizedType"
|
||||||
|
|
||||||
|
proc b(x: CustomTypeClass) =
|
||||||
|
echo "x as CustomTypeClass"
|
||||||
|
|
||||||
|
proc b[T](x: ParameterizedType[T]) =
|
||||||
|
echo "x as ParameterizedType[T]"
|
||||||
|
|
||||||
|
# and yet another order
|
||||||
|
proc c(x: CustomTypeClass) =
|
||||||
|
echo "x as CustomTypeClass"
|
||||||
|
|
||||||
|
proc c(x: ParameterizedType) =
|
||||||
|
echo "x as ParameterizedType"
|
||||||
|
|
||||||
|
proc c[T](x: ParameterizedType[T]) =
|
||||||
|
echo "x as ParameterizedType[T]"
|
||||||
|
|
||||||
|
# remove the most specific one
|
||||||
|
proc d(x: ParameterizedType) =
|
||||||
|
echo "x as ParameterizedType"
|
||||||
|
|
||||||
|
proc d(x: CustomTypeClass) =
|
||||||
|
echo "x as CustomTypeClass"
|
||||||
|
|
||||||
|
# then shuffle the order again
|
||||||
|
proc e(x: CustomTypeClass) =
|
||||||
|
echo "x as CustomTypeClass"
|
||||||
|
|
||||||
|
proc e(x: ParameterizedType) =
|
||||||
|
echo "x as ParameterizedType"
|
||||||
|
|
||||||
|
# the least specific one is a match
|
||||||
|
proc f(x: CustomTypeClass) =
|
||||||
|
echo "x as CustomTypeClass"
|
||||||
|
|
||||||
|
a(ParameterizedType[int]())
|
||||||
|
b(ParameterizedType[int]())
|
||||||
|
c(ParameterizedType[int]())
|
||||||
|
d(ParameterizedType[int]())
|
||||||
|
e(ParameterizedType[int]())
|
||||||
|
f(ParameterizedType[int]())
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue