In the C++ standard library, there is an object called the pair. Pair.first and Pair.second return the first and second values of the pair object, respectively. I want to increment the first value by one under a conditional (my pair is a pair). It's throwing "needs 1-value" when I try to do this. This could be because somewhere along the way I am not passing in a value by reference, but it could also be that .first does not return the first value of the pair by reference. Does anyone know if it does?
first is not a function, it is an object itself, a data member of struct pair. The name of an object is an lvalue, equivalent to a reference.
"Lvalue" is a language term denoting something that can go on the left-hand side of an assignment, i.e. a value can be assigned to it, or it has a meaningful address in memory.
The result of a conditional expression is an lvalue if both its alternatives are lvalues of the same type.
For example,
pair< int, int > p;
flag? p.first : p.second = 34; // ok
flag? p.first : 3 = 15; // error: 3 is not an lvalue; 3 = 15 is nonsense
pair< int, short > q;
flag? q.first : q.second = 12; // error: different types
Note, the opposite of "lvalue" is "rvalue," for right-hand side of an assignment. These terms are borrowed from the C language.
Remember: the lvalue of an expression is where it is stored, the rvalue is its content. Which of these an expression meaningfully has decide its value category.
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