If the initializer is a parenthesized single expression,
the type conversion expression is equivalent
to the corresponding
cast expression. Otherwise, if the type is
cv void
and the initializer is
() or
{}
(after pack expansion, if any),
the expression is a prvalue of the specified type
that performs no initialization
. Otherwise,
the expression is a prvalue of the specified type
whose result object is
direct-initialized
with the initializer
. If the initializer is a parenthesized optional
expression-list,
the specified type shall not be an array type
.