12345678910111213141516171819202122232425 |
- block: # `.noSideEffect`
- func foo(bar: proc(): int): int {.effectsOf: bar.} = bar()
- var count = 0
- proc fn1(): int = 1
- proc fn2(): int = (count.inc; count)
- template accept(body) =
- doAssert compiles(block:
- body)
- template reject(body) =
- doAssert not compiles(block:
- body)
- accept:
- func fun1() = discard foo(fn1)
- reject:
- func fun1() = discard foo(fn2)
- var foo2: type(foo) = foo
- accept:
- func main() = discard foo(fn1)
- reject:
- func main() = discard foo2(fn1)
|