Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2005-03-09 11:03:59

David Abrahams wrote:
> "Peter Dimov" <pdimov_at_[hidden]> writes:
>> David Abrahams wrote:
>>> If you want to be unambiguous, it has to be more like:
>>> [hello] <- a non-empty optional<std::string>
>>> [] <- a non-empty optional<std::string> (the string is
>>> empty) _ <- an empty optional<T>
>> My preference is
>> hello
>> _
>> A string can never be output "correctly", no matter what the
>> delimiters are ("a] [b").
> I disagree. You can generate escapes:
> [a\] \[b]
> or if you like,
> [a\]\ \[b]

I should have been more clear. You shouldn't attempt to fix the output of a
std::string in optional<>'s operator<<. The proper way to make a std::string
bi-directional is by defining appropriate operator<< and operator>>
overloads for std::string. As these operators are already defined and are
not bi-directional in the general case, optional<std::string> should not
attempt to provide extra bi-directionality.

I would concentrate on making simple bi-directional types working correctly,
and outputting a placeholder token such as _ for an empty optional is one
way to accomplish this that produces a reasonably clear output (although it
requires a putback, which is sadly not guaranteed to work).

Boost list run by bdawes at, gregod at, cpdaniel at, john at