Bonjour,
J'ai regardé un peu la norme sur decltype et commencé à jouer un peu avec sur Visual Express 2010 qui supporte cette évolution.
Or en lisant la norme, il y a des choses qui m'échappent.
Pour rappel, voici ce que dit la norme (en rouge, c'est moi qui rajoute) :
Voilà ce que je comprend :Envoyé par draft 3090 ¤7.1.6.2 Simple type specifiers
[1] cas où on se base sur un identifiant, çad, dans le cas courant une variable (membre ou non). Rien à dire, c'est assez compréhensible ;
[2] cas où on se base sur le retour d'une fonction (fonction, fonction membre, opérateur). Rien à dire, c'est assez compréhensible ;
[3] est-ce mon anglais qui est mauvais, une subtilité dans 'sinon, si e est une lvalue' qui m'échappe ou manque-t-il le double parenthésage qui permet d'avoir une référence : if e is an lvalue, decltype((e)) is T& ?
[4] quel cas cela concerne qui ne soit pas couvert par les précédents ? Une expression par exemple (decltype(T()+U()) ) ?
[5] Ça ne compile pas avec visual 2010. Connaissant mal les rvalue reference, je ne sais pas dire s'il s'agit d'une erreur de visual ou d'une erreur de l'exemple de la spec : cannot convert from 'int' to 'const int &&'
[6] J'ai du relire plusieurs fois le code et la norme avant de m'apercevoir que x4 est const double & car a est const. En gros, l'idée est de démontrer la différence entre l'exemple juste au dessus qui prend le type de la variable membre et celui-ci qui prend le type de l'expression. Le commentaire aurait pu être un pouillème plus clair.
Merci.
Partager