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]