
I suggested to add:
make_optional(v);
as a shortcut for:
optional<some_type>(v).
People argued, with reason, that you still need to discriminate yourself references from non-references (so you would need to use a different shortcut, like, make_optional_ref(r))
How about : o = make_optional(boost::ref(t)); But actually I'd rather say it explicitly all the time with optional<T>(t)
So my current proposal would be:
Remove direct-assignment. Let copy-assigment be the only way to define the wrapped value Add make_optional() and make_optional_ref() as shorcuts to help with copy-assignment Keep none-assignment as the only wat to clear the wrapped value.
That gets my vote. I'm not especially bothered whether make_optional and make_optional_ref go in or not, the user can decided whether they want to use it or not. Sam