Рассмотрим следующий пример, где мы анализируем данные и передаем результат следующей функции:
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?