In http://reviews.llvm.org/D10426#187768, @majnemer wrote:

> Is there a concrete benefit that this provides?


It makes the `#define decltype` actually provide correct `decltype` semantics 
in C++03. Since clang and GCC don't provide `decltype` in C++03 we used to fall 
back on `__typeof__`.  Because `__typeof__` does not deduce references it would 
change the meaning of code between C++03 and C++11. I think this change is 
beneficial to libc++ users who use the `decltype` macro we provide in C++03.

A concrete example within libc++ is the C++03 implementations of `__invoke` and 
`result_of` used to use `__typeof__` to deduce the return type of a call to a 
function object. If the return type was a reference we would get it wrong and 
`__invoke` will end up returning by value.

PS. I don't like that libc++ provides `decltype` to users in C++03 but I think 
it's way to late to change that.


http://reviews.llvm.org/D10426

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to