I was trying to understand why my code fails to compile, and eventually reduced
it enough to find out it is caused by a comment. Is that _normal_?
# PART 1 : atomics_test1.nim
type
VolatilePtr*[T] = distinct ptr T
proc toVolatilePtr*[T](t: var T): VolatilePtr[T] =
cast[VolatilePtr[T]](addr t)
when declared(atomicLoadN):
proc atomicLoadNSeqCST*[T: AtomType](p: VolatilePtr[T]): T {.inline.} =
atomicLoadN(cast[ptr[T]](p), ATOMIC_SEQ_CST)
## REMOVE ME!
# PART 2 : atomics_test2.nim
import atomics_test1
var my_vbyte {.volatile.}: byte = 42'u8
var my_vbyte_ptr: VolatilePtr[byte] = toVolatilePtr[byte](my_vbyte)
assert(atomicLoadNSeqCST(my_vbyte_ptr) == 42'u8)
The assert in PART 2 fails to compile, with message:
> atomics_test2.nim(7, 25) template/generic instantiation from here
>
> atomics_test1.nim(10, 16) Error: expression 'atomicLoadN(cast[ptr [T]](p),
> ATOMIC_SEQ_CST)' is of type 'byte' and has to be discarded
>
> The terminal process terminated with exit code: 1
If I remove the comment "## REMOVE ME!" in PART 1, it works again!