This works
type
VolatilePtr*[T] = distinct ptr T
template declVolatile*(T: typedesc, name: untyped) {.dirty.} =
var `volatile name value` {.global,volatile.}: T
let `name` {.global.}: VolatilePtr[T] = cast[VolatilePtr[T]](addr
`volatile name value`)
declVolatile(int, threadCount)
when isMainModule:
echo(threadCount)
> Also, I'd like to use _ as separators
> ([volatile](https://forum.nim-lang.org/postActivity.xml#volatile) name
> _value) but apparently it's not allowed. Why?
Never considered that. To influence name mangling, you should use an `extern:
"volatile_$1_value"` pragma anyway.