title: What is the difference between assigning to std::tie and tuple of references?
body: <p>I am a bit puzzled by the following tuple business:</p>
  
  <pre><code>int testint = 1;
  float testfloat = .1f;
  std::tie( testint, testfloat ) = std::make_tuple( testint, testfloat );
  std::tuple&lt;int&amp;, float&amp;&gt; test = std::make_tuple( testint, testfloat );
  </code></pre>
  
  <p>With <code>std::tie</code> it works, but assigning directly to the tuple of references doesn't compile, giving</p>
  
  <blockquote>
    <p>"error: conversion from ‘std::tuple&lt;int, float>’ to non-scalar type ‘std::tuple&lt;int&amp;, float&amp;>’ requested"</p>
  </blockquote>
  
  <p>or</p>
  
  <blockquote>
    <p>"no suitable user-defined conversion from std::tuple&lt;int, float> to std::tuple&lt;int&amp;, float&amp;>"</p>
  </blockquote>
  
  <p>Why? I double checked with the compiler if it's really the same type that is being assigned to by doing this:</p>
  
  <pre><code>static_assert( std::is_same&lt;decltype( std::tie( testint, testfloat ) ), std::tuple&lt;int&amp;, float&amp;&gt;&gt;::value, "??" );
  </code></pre>
  
  <p>Which evaluates as true.</p>
  
  <p>I also checked <a href="http://gcc.godbolt.org">online</a> to see if it maybe was the fault of msvc, but all compilers give the same result.</p>