[EMAIL PROTECTED] writes: >> From: Thorsten Ottosen [mailto:[EMAIL PROTECTED]] >> > What would the advantage be over using boost::numeric_cast >> directly, and >> > thus explicitly? >> >> you would't have to worry about if you forgot a numeric_cast >> somewhere in >> your code >> or if you compiled on a platform with different ranges for >> built-ins which >> suddenly >> could make conversion problems appear. > > That you don't have to worry is only true to a small extent - you still need > to worry, by protecting the code *somwhere* with a try/catch block. This is > also true for numeric_cast, but then it's straightforward to grok the code > when reading it. Obviously, the (potential) problems are always there as > soon as one starts mixing signed/unsigned types, and when assigning to a > potentially smaller type; they must always be checked regardless. > >> that depends on what the "problem" is. I would say that an >> _undetected_ >> false conversion >> is the biggest problem. > > Agreed! > >> >Doing it "manually", and acknowledging the potential problem by >> > using numeric_cast is (in addition to ensuring correct behavior) >> > self-documenting, a property that I think is rather important. >> >> by using a wrapper, you also acknowledge a potential problem. > > Yes, and when writing code like this: safe_numeric<unsigned char> t=u;, a > reader can understand that - the code has documented itself. But I don't see > an advantage over writing unsigned char t=numeric_cast<unsigned > char>(u);
The huge advantage appears when you start looking at arithmetic expressions. The result of if (t < u) { x = y + z * w; } could be a lot more predictable if we were working with types that didn't perform implicit lossy conversions. -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost