some comments about maybe things todo with iterator code and use std::move() stuff / r-value references with Optional<T>