I'm reading about decltype
with multiple arguments and according to everyone else it just validates that all types are consistent and if so, completely discards all parameters but the last one. However it seems that passing another parameter does affect the return value:
int i = 7;
decltype(i) var = i;
++var;
cout << i << endl; // prints '7', as I would expect
but:
int i = 7;
decltype(1, i) var = i;
++var;
cout << i << endl; // prints '8' - apparently 'var' is now a reference to 'i'
Why is that?
You are looking at ,
which is an operator in C++ (comma operator). See row 16
Its declaration may looks like this:
T2& operator,(const T& a, T2& b);
So a, b, c
is evaluate as ((a,b),c)
, (b,c)
, (c)
, which returns a reference to the return type of c
(a
, b
, c
can be expressions)
In your case 1, i
returns a reference to the last term, i
. Hence the type is int&
, so decltype(1, i) var = i;
becomes int& var = i;
(i)
is an expression, and it has return value which is a reference to i
(int&
)