Comme je l'ai compris en C++11 decltype(expression)
est utilisée pour déduire exactement le même type de l'expression donnée. Mais lorsque l'expression est de mettre en parenthèses, la déduit le type est lvalue de référence pour le type d'expression. Par exemple:
int x;
decltype(x) y = x;
est équivalent à int y = x;
mais,
int x;
decltype((x)) y = x;
est équivalent à int& y = x;
.
Respectivement
decltype(auto) f1()
{
int x = 0;
return x; // decltype(x) is int, so f1 returns int
}
mais
decltype(auto) f2()
{
int x = 0;
return (x); // decltype((x)) is int&, so f2 returns int&
}
Quelle est la justification de ce comportement pour être choisi par le comité de la norme?
Postfaces:
Maintenant, j'ai observé que, au moins dans le cas de la GCC 6.2 mise en œuvre lors de l'expression entre parenthèses est plus complexe, par exemple decltype((x + x))
le déduit de type est - T
, mais pas T&
. C'est encore plus confus. Je ne sais pas si ce comportement est standard.