Why do structured bindings depend on tuple_element? : <p>The <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0144r2.pdf" rel="noreferrer">most recent draft</a> of the structured bindings proposal (on which the C++17 feature was based) requires <code>std::tuple_size</code>, member <code>get</code> or <code>std::get</code>, and <code>std::tuple_element</code>. <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0144r1.pdf" rel="noreferrer">Previous drafts</a> require only <code>std::tuple_size</code> and member <code>get</code> or <code>std::get</code>. As far as I can tell, there was no discussion on adding this, it just appeared in the final draft. Is there a compelling reason to require the <code>tuple_element</code> specialization, considering I believe it can be implemented in general as</p>

<pre><code>template&lt;std::size_t index, typename T&gt;
struct tuple_element {
    using type = decltype(std::get&lt;index&gt;(std::declval&lt;T&gt;()));
};
</code></pre>

<p>Does anyone know of why this requirement was added?</p>
