The defaulted move and copy constructor, respectively, of pair
is a constexpr function if and only if all required element-wise
initializations for move and copy, respectively, would satisfy the
requirements for a constexpr function.
pair<T, U> is a structural type ([temp.param])
if T and U are both structural types.
Two values p1 and p2 of type pair<T, U>
are template-argument-equivalent ([temp.type]) if and only if
p1.first and p2.first are template-argument-equivalent and
p1.second and p2.second are template-argument-equivalent.
Effects: Initializes first with arguments of types
Args1... obtained by forwarding the elements of first_args
and initializes second with arguments of types Args2...
obtained by forwarding the elements of second_args.
an element x of type U within a tuple object means calling
This form of construction, whereby constructor
arguments for first and second are each provided in a separate
tuple object, is called piecewise construction.