|
Boost : |
Subject: Re: [boost] [conversion] try_lexical_cast and 200$
From: Peter Dimov (lists_at_[hidden])
Date: 2013-12-12 00:41:23
Antony Polukhin wrote:
> * `try_lexical_cast` must be added or not?
The motivation given is convincing.
"At Facebook we've seen many instances of programs that call lexical_cast in
a try/catch. In cases where the parsing is expected to fail (eg, an argument
could be an int or a date) we frequently see extremely poor performance in
multithreading. GCC is known to have poor multithreaded exception handling
gcc.gnu.org/ml/gcc/2013-05/msg00253.html"
Even without the performance argument, seeing repeated occurrences of
calling a function in a try block is a strong hint that the function perhaps
ought to not report the error via an exception.
> And if yes, what signature is preffered:
>
> bool try_lexical_cast<Out, In>(Out&, const In&)
> bool try_lexical_cast<Out, In>(const In&, Out&)
> boost::optional<Out> try_lexical_cast<Out, In>(const In&)
bool try_lexical_cast<In, Out>(const In&, Out&), I'd say. optional<> is cute
because you can use if( auto x = try_lexical_cast<Out>(in) ), but not very
convenient for the common case of try_lexical_cast(in1, out1) &&
try_lexical_cast(in2, out2).
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk