P3181R1 — Atomic stores and object lifetimes (6 items) SG1
Hans Boehm, Dave Clausen, David Goldblatt
The C++ object lifetime rules require that the last update to an object happens-before its destruction, but this is overly conservative when the final access is a relaxed atomic store preceded by a release fence. This paper proposes relaxing the rule so that an atomic store is considered 'before' the end of an object's lifetime if a load observing that store happens-before the end of the lifetime, thereby allowing fence-plus-relaxed-store patterns to safely synchronize object destruction just as release stores can.

References — Anthropic Citations API

[1]
"it is a store to an atomic ... c1: b = new atomic(0);"
[2]
"For something like the standard message passing litmus test the difference between "fence; relaxed-store" is usually stronger than "release-store", and the difference often doesn't matter."
[3]
"It is not fine if the store to A is a release fence, followed by a relaxed store"
[4]
"If we somehow promised that a1 did happen-before b1 would effectively turn memory_order::relaxed into memory_order::release, which is clearly unacceptable."
[5]
"This allows a memory_order_relaxed store, possibly preceded by an atomic_thread_fence() to inform another thread that an object is ready for deletion."
Summary: P3181R1 proposes clarifying the C++ standard to explicitly permit compilers to move atomic stores past the end of an object's lifetime, adding a non-normative note to [basic.life] and non-binding recommendations to [atomics.order] that acknowledge this existing implementation practice. Five editorial and grammatical issues were found in the paper's prose and proposed wording.
Pipeline: Discovery (Anthropic Opus + Citations API) → Verification Gate (OpenRouter Opus) → Report Writer (OpenRouter Opus)
Provenance: All references are machine-verified character positions from the Anthropic Citations API — deterministic, exact substrings, not model-generated quotes.