Je publie un comp.std.c++ Usenet discussion ici parce que ce groupe est devenu très peu fiable. Les derniers articles que j'ai soumis sont passés dans le vide, et l'activité a pratiquement cessé. Je doute que j'ai été banni et/ou que tout le monde a perdu tout intérêt. Espérons que toutes les personnes intéressées trouveront cette discussion, et il y aura une migration générale. Peut-être alors ils vont nommer un nouveau modérateur.C++ 0x: opérateur conditionnel, xvalues et decltype
Bonjour!
Avec mon interprétation actuelle de l'ébauche N3126 w.r.t. l'opérateur conditionnel et XValues, j'attends les affirmations suivantes à tenir:
int i = 0;
int& j = true? i : i;
int&& k = true? std::move(i) : std::move(i); // #2
assert(&i == &j); // Holds since C++98
assert(&i == &k); // Should this hold as well?
5,16/4 dit:
Si les deuxième et troisième opérandes [à l'opérateur conditionnel] sont glvalues de la même valeur et la catégorie ont le même type, le résultat est de cette catégorie de type et la valeur [...]
Cependant, il ne dit pas clairement que la valeur de glissement résultante fait référence à l'un des objets auxquels les opérandes de glgluture se réfèrent - ou est-ce implicite parce que sinon cela retournerait une prvalue? À l'aide de GCC 4.5.1 en mode C++ 0x la deuxième assertion échoue. La référence k semble se référer à un objet temporaire. Quelqu'un peut-il clarifier si le comder est autorisé à créer un tel temporaire dans le cas où les deux opérandes autour du côlon sont xvalues du même type?
Je suppose actuellement que GCC est buggé et/ou pas à jour en ce qui concerne à xvalues.
La question de suivi est la suivante: ne serait-il pas agréable de pouvoir détecter la catégorie de valeur d'une expression? Si nous ignorons l'opérateur conditionnel , nous pouvons détecter la catégorie de valeur d'une expression avec decltype. Mais qu'est-ce que
bool xvalue = std::is_rvalue_reference<
decltype(true ? std::move(i) : std::move(i)) >::value;
supposé céder? En utilisant GCC 4.5.1, la variable xvalue est initialisée avec false. Est-ce conforme au brouillon standard actuel?
TIA, Sebastian
Je pense que vous voulez dire [comp.std.C++], comme le laisse entendre votre lien. Oui, il y a un peu de décalage mais je pense que vous venez de rencontrer un black-out Google récent. Avez-vous publié des messages via Google Groupes? –
@Alf: Je publie des messages par Google Groupes, mais cela ne toucherait-il pas tous les groupes? Il n'y a pratiquement aucune activité sur comp.std.C++ depuis septembre, pas pour les groupes non modérés. – Potatoswatter
D'ici, c.l.C++ a 30 messages pour mon "aujourd'hui" local, c.s.C++ en a deux (un de "SG", qui semble être vous), et cinq autres messages pour d'autres personnes ce mois-ci. – sbi