mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-01 19:02:18 +00:00
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)
48 lines
693 B
Nim
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())
|