1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
# issue #23326
type Result*[E] = object
e*: E
proc error*[E](v: Result[E]): E = discard
template valueOr*[E](self: Result[E], def: untyped): int =
when E isnot void:
when false:
# Comment line below to make it work
template error(): E {.used, gensym.} = s.e
discard
else:
template error(): E {.used, inject.} =
self.e
def
else:
def
block:
let rErr = Result[string](e: "a")
let rErrV = rErr.valueOr:
ord(error[0])
block:
template foo(x: static bool): untyped =
when x:
let a = 123
else:
template a: untyped {.gensym.} = 456
a
doAssert foo(false) == 456
doAssert foo(true) == 123
|