Avec la nouvelle norme du C++ certains mots réservés se sont vu modifiés et de nouveaux mots-clefs sont apparus. C'est le cas de auto
et decltype
.
auto
permet maintenant de ne pas indiquer de type lors de l'initialisation, le compilateur le faisant tout seul.
auto i = 8; // int
auto& x = i; // int&
auto p = new A; // A*
auto f = [](int n) { return n + 1; }; // quelque chose :)
decltype
quant à lui permet de copier le type d'une variable ou d'une expression. Il s'utilise là où auto ne peut l'être, lors de la déclaration d'une variable.
decltype(f(8)) r; // int
decltype(x) ref; // int&
À noter que 2 parenthèses transforment le type en référence.
decltype((i)) a; // int&
Encore plus fort, auto
et decltype
peuvent être combinés pour déduire le retour d'une fonction.
template<typename _T, typename _U>
auto f(const _T& a, const _U&) -> decltype(a + b)
{ return a + b; }