Obtain
P from
T by replacing the occurrences of
type-constraintopt auto either with
a new invented type template parameter
U or,
if the initialization is copy-list-initialization, with
std::initializer_list<U>. Deduce a value for
U using the rules
of template argument deduction from a function call (
[temp.deduct.call]),
where
P is a
function template parameter type and
the corresponding argument is
E. If the deduction fails, the declaration is ill-formed
. Otherwise,
T′ is obtained by
substituting the deduced
U into
P. [
Example 1:
auto x1 = { 1, 2 };
auto x2 = { 1, 2.0 };
auto x3{ 1, 2 };
auto x4 = { 3 };
auto x5{ 3 };
—
end example]