Здравствуйте, so5team, Вы писали:
S>This approach is more expressive than using pointers and nullptr.
S>Если брать пример использования:
S>S> foo(5, std::nullopt, std::nullopt);
S>
S>то это ничем не лучше:
S>S> foo(5, nullptr, nullptr);
S>
Можно писать
foo(5, {}, {});
но эт вкусовщина.
А "паттерн", да, кривой и вообще не паттерн.
optional подходит если нет особенного значения типа nullptr, 0, -1, пустой строки и т.д. То есть, эти значения тоже являются значениями, и
foo(5, nullptr, nullptr) не эквивалентно
foo(5, {}, {})
Иначе зачем он нужен?... Шляпа.