[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)
