Does this const reference have its life preserved?

Viewed 240

I have found this answer to the question "Does a const reference prolong the life of a temporary?", which states:

Only local const references prolong the lifespan.

I'm afraid my standardese is not up to scratch to know whether foo, below, is a local const reference or not.

Does my const std::string& foo below prolong the lifetime of the temporary std::string function argument created in the call to get_or, or do I have a dangling reference?

#include <iostream>
#include <boost/optional.hpp>

struct Foo
{
    const std::string& get_or(const std::string& def)
    {
        return str ? str.get() : def;
    }

    boost::optional<std::string> str;
};

int main()
{
    Foo f;
    const std::string& foo = f.get_or("hello world");

    std::cout << foo << '\n';
}
3 Answers
Related