
From: <Vladimir.Batov@wrsa.com.au>
From: "Stewart, Robert" <Robert.Stewart@sig.com> I was thinking a bit about syntax for the default value for the notional boost::convert() and kin. How about the following:
int const i(3); string const s("something"); int const j(convert<int>(s) | 5);
Yes, this idea is similar to
int j = convert<int>(s).or_default(5);
but does not introduce new vocabulary (my main hesitation). With the suggested op|, as I am reading it, it makes perfect reading just like I'd read English. And that is usually my criterion for an interface. So, I am voting 'yes'... in principle.
Now I am not so sure. In isolation it looks good: int j = convert_to<int>(s) | 5; What happens when we start mixing with int j = convert_to<int>(s) | 5 >> std::hex; int j = convert_to<int>(s) | 5 >> boost::dothow >> std::hex; or even int j = convert_to<int>(s) >> boost::dothow >> std::hex | 5; That is, it goes against what you said (and I agree with) -- "Returning a default value ... ought not be treated like formatting". Above we do treat the default like formatting, don't we? Now I feel confused and want back to the comfort of int j = convert_from<string, int>(s, 5) >> std::hex; V.