Evaluate an InputIterator sequence and return a boost::optional which contains the last value in the sequence, or an empty `boost::optional` if the sequence was empty.

`optional_last_value` is the default Combiner template type for signals in the Boost.Signals2 library. The advantage of `optional_last_value` over `signals2::last_value` is that `optional_last_value` can return an empty `boost::optional`. rather than throwing an exception, when its `InputIterator` sequence is empty.

`boost::optional`<T>
result_type `InputIterator` `InputIterator`

Attempts to dereference every iterator in the sequence `[first, last)`.

The result of the last successful iterator dereference, wrapped in a `boost::optional`. The returned `optional` will be empty if no iterators were dereferenced.

Does not throw.

void
Evaluate an InputIterator sequence.

This specialization of `signals2::optional_last_value` is provided to cope with the fact that there is no such thing as an ``optional`<void>`, which `optional_last_value` would otherwise try to use as its `result_type`. This specialization instead sets the `result_type` to be `void`.

void
result_type `InputIterator` `InputIterator`

Attempts to dereference every iterator in the sequence `[first, last)`.