3978. The "no effect" requirement for std::ignore is unimplementable for volatile bit-fields

Section: 22.4.5 [tuple.creation] Status: Resolved Submitter: Jiang An Opened: 2023-08-19 Last modified: 2024-07-25

Priority: 4

View all other issues in [tuple.creation].

View all issues with Resolved status.

Discussion:

22.4.5 [tuple.creation]/5 currently says:

[…] When an argument in t is ignore, assigning any value to the corresponding tuple element has no effect.

which is unimplementable for volatile-qualified bit-field glvalues.

In order to passing such a value to the operator= function, a distinct object needs to be created and thus the read from the volatile glvalue, which is a side effect (6.9.1 [intro.execution]/7), is unavoidable.

P2968R0 addresses the impossibility of assignment from void values, but doesn't talk about volatile bit-fields. Perhaps we should explicitly say that the program is ill-formed if a volatile bit-field value is assigned to std::ignore (which is implemented in libstdc++ and MSVC STL, but not in libc++).

[2023-11-03; Reflector poll]

Set priority to 4 after reflector poll. "Specify it as code." "P2968 should fix this."

[2024-07-25 Status changed: New → Resolved.]

Resolved by P2968R2, approved in St. Louis.

Proposed resolution: