
Joel de Guzman wrote:
Andrei Alexandrescu wrote:
Hello,
I'm defining an "optional" type for D's standard library modeled similarly to Boost.optional. An interesting question came up - should optional<optional<T>> fold itself into optional<T>, or is "double optional" an interesting concept of its own?
I thought I'd ask here because by now there's a significant body of experience with optional<T>. I perused the online documentation and the forum and couldn't find information about that specific detail.
We use boost.optional extensively in Boost.Spirit. IIRC, we collapse such things. Usually they occur in generic code. I see no real need for optional<optional<T>>. If there's a use for it, I too would like to hear it.
I use double optionals. Indeed, this appears in a generic code, but it's intended. The point is that I use the outer optional to in-place construct objects, and it sometimes happens that the objects themselves are optionals. Making them not optional would not be correct from the application logic point of view.