auto vrs decltype(auto)

Hi,
Why do we have 2 ways of deducing types: using auto and using decltype(auto)?

Thanks,
Juan
Because they are different?
Because one was introduced before the other?
Because extending the first to second usage would have broken something?
Surely they are different...

My question was: what is the essential difference between the 2?

How do they differ?
Difference from decltype

Unfortunately, there is no way to get the effect of decltype with an auto return type; plain auto never deduces to a reference, and auto&& always deduces to a reference. This is a significant problem, as it means that forwarding functions can't use auto. We could consider using decltype semantics instead of the existing auto semantics, but that would mean giving different deduction semantics to auto depending on whether the declaration is of a variable or a function, and making auto functions different from lambdas.

Therefore, I propose to also allow decltype(auto) to get the decltype semantics without having to repeat the expression. For simplicity of specification and orthogonality I propose to allow it everywhere that plain auto is allowed, except for introducing a trailing-return-type. It occurs to me that the difference in meaning of decltype depending on the form of the expression (e.g. parenthesized or not) might be more surprising in this context, but I think it would be even more surprising if this worked differently from C++11 decltype.
- N3638 (proposal) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html
(emphasis added)
Topic archived. No new replies allowed.