Section: 22.4.5 [tuple.creation] Status: Resolved Submitter: Eric Fiselier Opened: 2017-02-06 Last modified: 2024-07-25
Priority: 3
View all other issues in [tuple.creation].
View all issues with Resolved status.
Discussion:
The current PR for LWG 2773 changes std::ignore to be a constexpr variable. However it says
nothing about whether using std::ignore in std::tie is a constant expression. I think the intent was clearly
to allow this. Therefore I suggest we update the resolution to explicitly call this out in a note. (I don't think new normative
wording is needed).
Keep the current changes proposed by the PR.
Add a note after [tuple.creation]/p7 (std::tie):
[Note: The constructors and assignment operators provided by
ignoreshall beconstexpr]
Perhaps LWG feels the existing wording is clear enough, but if not I think the above changes sufficiently clarify it.
The ability toconstexpr assign to std::ignore can be important: Here is an extremely contrived example:
constexpr bool foo() {
auto res = std::tie(std::ignore);
std::get<0>(res) =42;
return true;
}
static_assert(foo());
[2017-03-04, Kona]
Set priority to 3. P/R is incorrect; it should NOT be a note. Marshall to work with Eric to get better wording. STL says "use an exposition-only class".
[2024-07-25 Status changed: New → Resolved.]
Resolved by P2968R2, approved in St. Louis.
Proposed resolution:
This wording is relative to N4640.
Modify 22.4.5 [tuple.creation] as indicated:
template<class... TTypes> constexpr tuple<TTypes&...> tie(TTypes&... t) noexcept;-7- Returns: […]
-?- [Note: The constructors and assignment operators provided byignoreshall beconstexpr. — end note] -8- [Example: […] — end example]