
From: "Fernando Cacciola" <fernando_cacciola@hotmail.com>
I wonder what would be the result of the following thought experiment: Please, answer the questions _without_ looking at the answers, and if possible post your initial results; then compare with the answers.
IANAOU either (yet!), but I'll give my answers. First, I'll describe what I think the right behavior is; this may be exactly how optional works now or it may not be. I haven't compared this description to optional's documentation. An optional<T&> should optionally contain a reference to T. Either optional<T&> has a T& or it doesn't. Since T& cannot be rebound, neither should optional<T&>'s T& be rebound by assignment from another T&. That said, assigning from none restores the optional<T&> to (the equivalent of) its default constructed state, so it can bind to a new T&. Thus, I don't consider the described behavior for optional<T&> as supporting rebinding because it is reset by assignment from none; it is not rebound by assignment from a T&.
int a = 1; int b = 2 ; int c = 3 ; int &ra = a; int &rb = b; int &rc = c;
optional<int&> o = ra;
You can't have a reference to a reference, so o contains a reference to a.
o = rb ; // [1]
Assigns b's value through o's reference to a. o still holds a reference to a.
o = none ;
No reference in o.
o = rc ; [2]
Now o contains a reference to c.
(a) What is the value of 'a' after [1]?
2
(b) What is the value of 'a' after [2]?
2 -- Rob Stewart stewart@sig.com Software Engineer http://www.sig.com Susquehanna International Group, LLP using std::disclaimer;