Boost logo

Boost :

From: Mateusz Loskot (mateusz_at_[hidden])
Date: 2020-01-19 11:41:19

On Sun, 19 Jan 2020 at 11:57, anshu khare via Boost
<boost_at_[hidden]> wrote:
> But when I run
> const std::string i = {};
> boost::optional<const std::string&> str = i;
> cout << get_optional_value_or(str, "some other string") ;
> The output is an empty string.
> Shouldn't it give "some other string as output"

No, it should not.

>From the documentation:
"Class template optional is a wrapper for representing 'optional' (or
objects who may not (yet) contain a valid value."

An empty string in `i` variable IS a valid value, so `str` is set with
a valid value,
Since it is valid value, get_optional_value_or returns that valid value
and not the "some other string".

> because if I run the same
> code with integer it gives the second parameter of get_optional_value_or()
> as output?

Are you sure?

This is expected to print 0, the valid value of `i` and not the default 1:

int i = {};
boost::optional<int> v = i;
cout << get_optional_value_or(v, 1);

Best regards,

Mateusz Loskot,

Boost list run by bdawes at, gregod at, cpdaniel at, john at