I have had runtime error, when replaced some code by using std::optional:
Old code:
T getValue();
...
const auto& value = getValue();
value.get();
New code:
std::optional<T> getValue();
...
const auto& value = getValue().value();
value.get(); // Runtime error, crash
It was unpredictable for me.
The reason of crash is that the method returns T&&
.
My question is in what cases T&&
can be useful, why the method does not return a T
.
Complete code:
#include <experimental/optional>
#include <iostream>
#include <memory>
struct Value {
std::unique_ptr<int> a = std::make_unique<int>(5);
};
std::experimental::optional<Value> getValue() {
Value v;
return v;
}
int main() {
const Value& value = getValue().value();
std::cout << *value.a << std::endl;
return 0;
}