Commit 75b6265
committed
wording: store the error as unexpected<E> in the primary and void specs
The step-1 relaxation lets expected<T, E> and expected<void, E> take an
lvalue-reference E, but their ratified exposition stores the error as a
bare union member E unex, which is ill-formed for E& (same as-if defect
just fixed in [expected.ref]). Change both union members to unexpected<E>
and route error access through unex.error().
The edit is surgical: construct_at(addressof(unex), ...), reinit-expected,
swap(unex, rhs.unex), and the "direct-non-list-initializes unex with the
error" construction prose all operate correctly on unexpected<E> unchanged.
Only the four error() returns (-> unex.error()), the same-state assignment
lines (unex = rhs.unex; and unex = unexpected<E>(...e.error())), and the
primary swap's temporary (E tmp -> unexpected<E> tmp) change. unexpected<E>
assignment gives rebind for reference E and assign-through for object E,
which is exactly the intended semantics.
Left as a follow-up (equivalent, not incorrect): the swap noexcept
specification still tests is_nothrow_swappable_v<E>, which is
over-conservative for a reference E (the pointer swap is always noexcept).
Verified: build clean at 93 pages; stripped diff vs expected-base.tex
changes exactly the 16 intended lines (13 storage + 3 relaxation), no
churn; bad_expected_access and unexpected keep E unex (a reference class
member, not a union member, is legal).1 parent d740a83 commit 75b6265
1 file changed
Lines changed: 13 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
612 | 612 | | |
613 | 613 | | |
614 | 614 | | |
615 | | - | |
| 615 | + | |
616 | 616 | | |
617 | 617 | | |
618 | 618 | | |
| |||
1062 | 1062 | | |
1063 | 1063 | | |
1064 | 1064 | | |
1065 | | - | |
| 1065 | + | |
1066 | 1066 | | |
1067 | 1067 | | |
1068 | 1068 | | |
| |||
1139 | 1139 | | |
1140 | 1140 | | |
1141 | 1141 | | |
1142 | | - | |
| 1142 | + | |
1143 | 1143 | | |
1144 | 1144 | | |
1145 | 1145 | | |
| |||
1247 | 1247 | | |
1248 | 1248 | | |
1249 | 1249 | | |
1250 | | - | |
| 1250 | + | |
1251 | 1251 | | |
1252 | 1252 | | |
1253 | 1253 | | |
| |||
1349 | 1349 | | |
1350 | 1350 | | |
1351 | 1351 | | |
1352 | | - | |
| 1352 | + | |
1353 | 1353 | | |
1354 | 1354 | | |
1355 | 1355 | | |
| |||
1517 | 1517 | | |
1518 | 1518 | | |
1519 | 1519 | | |
1520 | | - | |
| 1520 | + | |
1521 | 1521 | | |
1522 | 1522 | | |
1523 | 1523 | | |
| |||
1533 | 1533 | | |
1534 | 1534 | | |
1535 | 1535 | | |
1536 | | - | |
| 1536 | + | |
1537 | 1537 | | |
1538 | 1538 | | |
1539 | 1539 | | |
| |||
2025 | 2025 | | |
2026 | 2026 | | |
2027 | 2027 | | |
2028 | | - | |
| 2028 | + | |
2029 | 2029 | | |
2030 | 2030 | | |
2031 | 2031 | | |
| |||
2300 | 2300 | | |
2301 | 2301 | | |
2302 | 2302 | | |
2303 | | - | |
| 2303 | + | |
2304 | 2304 | | |
2305 | 2305 | | |
2306 | 2306 | | |
| |||
2347 | 2347 | | |
2348 | 2348 | | |
2349 | 2349 | | |
2350 | | - | |
| 2350 | + | |
2351 | 2351 | | |
2352 | 2352 | | |
2353 | 2353 | | |
| |||
2396 | 2396 | | |
2397 | 2397 | | |
2398 | 2398 | | |
2399 | | - | |
| 2399 | + | |
2400 | 2400 | | |
2401 | 2401 | | |
2402 | 2402 | | |
| |||
2546 | 2546 | | |
2547 | 2547 | | |
2548 | 2548 | | |
2549 | | - | |
| 2549 | + | |
2550 | 2550 | | |
2551 | 2551 | | |
2552 | 2552 | | |
| |||
2562 | 2562 | | |
2563 | 2563 | | |
2564 | 2564 | | |
2565 | | - | |
| 2565 | + | |
2566 | 2566 | | |
2567 | 2567 | | |
2568 | 2568 | | |
| |||
0 commit comments