Like std::make_shared<T>(), it support implicit construction.
such as, bad case:
auto f = []() -> ResultOr<std::shared_ptr<int>> {
return nullptr;
};
good case:
auto f = []() -> ResultOr<std::shared_ptr<int>> {
return std::shared_ptr<int>(nullptr);
};