
On 29 March 2010 02:32, Chad Nelson <chad.thecomfychair@gmail.com> wrote:
Not completely. There *are* the two functions that return Not-a-Number as part of their normal operation, not counting the string- and stream-reading functions. As I said on the rationales page of the documentation, I tried using Boost.Optional for those, but it made the library harder for people not already familiar with Boost.Optional to understand. An error code is an idiom that every C or C++ developer already understands well and knows how to deal with.
Those two functions, invmod and random_prime, can use xint() as their error code, if the relevant exception is blocked, since 0 is obviously neither a multiplicative inverse or a prime. That even lets you use them like error codes: xint z = invmod(x, y); if (z) { ... worked ... } else { ... no inverse exists ... } Though personally I think I'd still prefer an exception. If I'm doing RSA and there's no inverse, something has gone drastically wrong.