tuple
should be a literal typeSection: 22.4.1 [tuple.general] Status: C++17 Submitter: Jonathan Wakely Opened: 2016-11-09 Last modified: 2017-07-30
Priority: 2
View all other issues in [tuple.general].
View all issues with C++17 status.
Discussion:
Addresses US 109
tuple
should be a literal type if its elements are literal
types; it fails because the destructor is not necessarily trivial.
It should follow the form of optional and variant, and mandate a
trivial destructor if all types in Types...
have a trivial destructor. It is not
clear if pair
has the same issue, as pair
specifies data
members first
and second
, and appears to have an
implicitly declared and defined destructor.
Suggested resolution:
Document the destructor for tuple
, and mandate that
it is trivial if each of the elements in the tuple
has a
trivial destructor. Consider whether the same
specification is needed for pair
.
[2016-11-09, Jonathan provides wording]
[Issues Telecon 16-Dec-2016]
Move to Review; we think this is right, but are awaiting implementation experience.
Proposed resolution:
This wording is relative to N4606.
Add a new paragraph after 22.3.2 [pairs.pair] p2:
-2- The defaulted move and copy constructor, respectively, of
pair
shall be aconstexpr
function if and only if all required element-wise initializations for copy and move, respectively, would satisfy the requirements for aconstexpr
function. The destructor ofpair
shall be a trivial destructor if(is_trivially_destructible_v<T1> && is_trivially_destructible_v<T2>)
istrue
.
Add a new paragraph after the class synopsis in 22.4.4 [tuple.tuple]:
-?- The destructor of
tuple
shall be a trivial destructor if(is_trivially_destructible_v<Types> && ...)
istrue
.