Why decltype is required in C++11?
auto
means "the variable's type is deduced from the initialiser."
decltype
refers to a type in an arbitrary context.
Here's an example where you can't use auto
:
template <typename T, typename U, typename V>
void madd(const T &t, const U &u, const V &v, decltype(t * u + v) &res)
{
res = t * u + v;
}
There is no initialiser in the parameter declaration (and there can't be), so you can't use auto
there.
The thing is, 99% of uses for decltype
is in templates. There's no equivalent functionality for it there. In non-template code, auto
is usually what you want to use.
While it is useful to get variables declared using auto
, if you actually need to know the type of an expression, e.g., when producing a return type for a templatized function, auto
isn't sufficient: you need to not just name a value but you need to get hold of type, e.g., to modify it. If anything could be dropped it would be auto
. However, the use of decltype()
tends to be a lot more wordy, i.e., auto
is a nice short-cut.