Je jouais avec la fonction utilitaire std :: is_same en combinaison avec la référence rvalue et lvalue et je suis tombé sur un comportement étrange. Considérons ce modèle de fonction qui vérifie le type de la variable t.std :: is_same résultat avec lvalue et référence rvalue
J'utilise VS 2013:
struct Test {};
template < class T> void h(T && t)
{
cout << " Is type &&: " << std::is_same<decltype(t), T &&>::value << endl;
cout << " Is type &: " << std::is_same<decltype(t), T &>::value << endl;
}
J'observe les sorties suivantes:
h(Test()); // is type && : 1 is type & : 0
ce qui est normal pour l'instant en tant que test() est un objet temporaire, et la référence universelle dans le paramètre de h a pour valeur ar référence (& & & & = & &)
mais considérez ceci:
Test myTest;
h(myTest); // is type && : 1 is type & : 1 !!!
même résultat si j'écris:
Test &myTest = Test():
h(myTest); // is type && : 1 is type & : 1 !!!
et même avec:
Test &&myTest = Test():
h(myTest); // is type && : 1 is type & : 1 !!!
AM Je manque quelque chose? Ca ressemble à un désordre total pour moi :) Les fonctionnalités rvalue reference/decltype ne sont pas totalement supportées dans VS 2013?
Merci pour votre aide
Romain
Cela me semble complètement correct. –
Comment pouvez-vous être à la fois une référence lvalue et rvalue? – Romain227
Indice: dans les deux derniers cas, 'T' est' Test & '. –