Quelle est la différence entre assigner à std :: tie et tuple de références?

Je suis un peu perplexe par ce qui suit n-uplet d'affaires:

int testint = 1;
float testfloat = .1f;
std::tie( testint, testfloat ) = std::make_tuple( testint, testfloat );
std::tuple<int&, float&> test = std::make_tuple( testint, testfloat );

Avec std::tie il fonctionne, mais en l'assignant directement à la tuple de références ne compile pas, donnant

"erreur: la conversion de ‘std::tuple<int, float>’ non-scalaires de type ‘std::tuple<int&, float&> "demandé"

ou

"pas de conversion définie par l'utilisateur à partir de std::tuple<int, float> std::tuple<int&, float&>"

Pourquoi? J'ai vérifié avec le compilateur si c'est vraiment le même type qui est affecté par cela:

static_assert( std::is_same<decltype( std::tie( testint, testfloat ) ), std::tuple<int&, float&>>::value, "??" );

Qui est évaluée à vrai.

J'ai aussi vérifié en ligne pour voir si c'était peut-être la faute de msvc, mais tous les compilateurs donnent le même résultat.

source d'informationauteur Barabas