Добрый день.
Рассмотрим пример из Boost:
// Here, having received an empty vec and having no size_t to return is not a failure but a normal, albeit irregular, situation.
template <typename T>
optional<size_t> find_smallest_elem(const std::vector<T>& vec);
Теперь посмотрим на std::string:
// Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type find(const basic_string& str, size_type pos = 0) const noexcept;
Внимание, вопросы:
- Какой API вам кажется приятнее?
- Если да, то чем это лучше подхода std::string::npos?
- Если это лучше подхода std::string::npos, то чем думали члены комитета при выпуске C++17, где же этот их самый optional в API того же std::string?
Спасибо.