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.

Reply via email to