Files
Nim/tests/generics/ttemplateparamcall.nim
metagn 316141162b test case haul to prevent pileup (#24525)
closes #6013, closes #7009, closes #9190, closes #12487, closes #12831,
closes #13184, closes #13252, closes #14860, closes #14877, closes
#14894, closes #14917, closes #16153, closes #16439, closes #17779,
closes #18074, closes #18202, closes #18314, closes #18648, closes
#19063, closes #19446, closes #20065, closes #20367, closes #22126,
closes #22820, closes #22888, closes #23020, closes #23287, closes
#23510

(cherry picked from commit aeb3fe9505)
2025-01-14 13:17:11 +01:00

48 lines
693 B
Nim

discard """
output: '''
L
L
L
L
B
B
B
B
'''
"""
# issue #18202
type
R = object
S = object
U = R | S
L = object
B = object
C = B | L
proc f(n: L, q: R | S) = echo "L"
proc f(n: B, q: R | S) = echo "B"
proc g(n: C, q: R | S) = echo (when n is L: "L" else: "B")
proc h(n: L, q: U) = echo "L"
proc h(n: B, q: U) = echo "B"
proc j(n: C, q: U) = echo (when n is L: "L" else: "B")
proc e(n: B | L, a: R) =
template t(operations: untyped, fn: untyped) = fn(n, operations)
# Work as expected
t(a, f)
t(a, g)
t(a, j)
# Error: type mismatch: got <R, proc [*missing parameters*](n: B, q: U) | proc [*missing parameters*](n: L, q: U)>
t(a, h)
e(L(), R())
e(B(), R())