Current C2 intrinsic code makes Opaque a "relaxed" plain load/store with regards to single copy atomicity. bool requires_atomic_access = false; switch (kind) { case Relaxed: case Opaque: requires_atomic_access = AlwaysAtomicAccesses; break; This contradicts the intent of making Opaque similar to std::atomic...(..., memory_order_relaxed), which is single copy atomic.