Very simple question, I'm unable to google out the answer.
For example:
int a = 0;
int& b = x;
int&& c = 1;
decltype((a)) x; // what is the type of x?
decltype((b)) y; // what is the type of y?
decltype((c)) z; // what is the type of z?
Maybe I should assign x,y and z to some value to get different results, I'm not sure.
EDIT:
According to site below double brackets turn example int into a reference:
https://github.com/AnthonyCalandra/modern-cpp-features#decltype
int a = 1; // `a` is declared as type `int`
int&& f = 1; // `f` is declared as type `int&&`
decltype(f) g = 1; // `decltype(f) is `int&&`
decltype((a)) h = g; // `decltype((a))` is int&
All of them are of type int&.
Adding parentheses like (a) makes them expressions (instead of entity), which are all lvalues (as named variables); then decltype yields to T&, i.e. int& here.
...
4) If the argument is any other expression of type
T, and...
b) if the value category of expression is lvalue, then decltype yields
T&;...
You can check the actual types with this LIVE DEMO (from the compiling error messages).
According to C++ Primer:
When we apply
decltypeto a variable without any parentheses, we get the type of that variable. If we wrap the variable’s name in one or more sets of parentheses, the compiler will evaluate the operand as an expression. A variable is an expression that can be the left-hand side of an assignment. As a result,decltypeon such an expression yields a reference:// decltype of a parenthesized variable is always a reference decltype((i)) d; // error: d is int& and must be initialized decltype(i) e; // ok: e is an (uninitialized) int
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With