Since Visual C++ 2005, Microsoft has made additional ordering guarantees for accesses to volatile types which are not required by the C++ Standard.
Does anything in the C++ Standard actually forbid these guarantees? The Microsoft documentation seems to think so.
Please let me know whether the Standard allows the ordering implemented by Microsoft, and also vote on this bug report:
An implementation is certainly allowed to do things beyond on what is required as long as it meets the requirements set forth by the standard. Adding release/acquire semantics to
volatileobject is definitely within scope. I don’t think there is interest in the C++ committee to change the semantics (we are just starting a new week of discussing C++ in Portland with Herb right now talking about how to organize the meeting).