Est-ce que l'utilisation suivante de p
dans main
est sûre? Je crois que la liaison temporaire produite par mk_pair
a sa durée de vie étendue à celle de p
, mais qu'en est-il des objets temporaires créés par Wrap{1}
et Wrap{2}
?Durée de vie d'une temporaire avec des sous-expressions temporaires, liée à une référence
struct Wrap { int &&x; };
struct Pair { Wrap &&w1, &&w2; };
Pair mk_pair(Wrap &&w1, Wrap &&w2) { return Pair{std::move(w1),std::move(w2)}; }
int main(int argc, char *argv[])
{
Pair &&p = mk_pair(Wrap{1},Wrap{2});
std::cout << p.w1.x << ' ' << p.w2.x << '\n';
return 0;
}