56 lines
1.6 KiB
Markdown
56 lines
1.6 KiB
Markdown
[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)
|