Рассмотрим следующий пример, где мы анализируем данные и передаем результат следующей функции:
Content Parse(const std::string& data);
void Process(Content content);
int main()
{
auto data = ReadData();
Process(Parse(data));
}
Теперь измените код с помощью std::optional
, чтобы обработать неудачный шаг синтаксического анализа:
optional<Content> Parse(const std::string& data);
void Process(Content content);
int main()
{
auto data = ReadData();
auto content = Parse(data);
if (content)
Process(move(*content));
}
Действительно ли он перемещается из optional<T>::value()
? Если это нормально для std::optional
, оно действительно для boost::optional
?