[diff.cpp17.basic] # Annex C (informative) Compatibility [[diff]](./#diff) ## C.3 C++ and ISO C++ 2017 [[diff.cpp17]](diff.cpp17#basic) ### C.3.3 [[basic]](basic "6 Basics"): basics [diff.cpp17.basic] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L975) **Affected subclause:** [[basic.life]](basic.life) **Change:** A pseudo-destructor call ends the lifetime of the object to which it is applied[.](#1.sentence-1) **Rationale:** Increase consistency of the language model[.](#1.sentence-2) **Effect on original feature:** Valid ISO C++ 2017 code may be ill-formed or have undefined behavior in this revision of C++[.](#1.sentence-3) [*Example [1](#example-1)*: int f() {int a = 123; using T = int; a.~T(); return a; // undefined behavior; previously returned 123} — *end example*] [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/compatibility.tex#L995) **Affected subclause:** [[intro.races]](intro.races) **Change:** Except for the initial release operation, a release sequence consists solely of atomic read-modify-write operations[.](#2.sentence-1) **Rationale:** Removal of rarely used and confusing feature[.](#2.sentence-2) **Effect on original feature:** If a memory_order_release atomic store is followed by a memory_order_relaxed store to the same variable by the same thread, then reading the latter value with a memory_order_acquire load no longer provides any “happens before” guarantees, even in the absence of intervening stores by another thread[.](#2.sentence-3)