Otherwise, if
the 
qualified-id std::tuple_size<E>
names a complete class type with a member named 
value,
the expression 
std::tuple_size<E>::value
shall be a well-formed integral constant expression
and
the number of elements in
the 
identifier-list shall be equal to the value of that
expression
.Let 
i be an index prvalue of type 
std::size_t
corresponding to 
vi.If a search for the name 
get
in the scope of 
E (
[class.member.lookup])
finds at least one declaration
that is a function template whose first template parameter
is a non-type parameter,
the initializer is
e.get<i>().Otherwise, the initializer is 
get<i>(e),
where 
get undergoes argument-dependent lookup (
[basic.lookup.argdep])
.
In either case, 
e is an lvalue if the type of the entity 
e
is an lvalue reference and an xvalue otherwise
.Given the type Ti designated by
std::tuple_element<i, E>::type and
the type Ui designated by
either Ti& or Ti&&,
where Ui is an lvalue reference if
the initializer is an lvalue and an rvalue reference otherwise,
variables are introduced with unique names ri as follows: