
Steven Ross wrote:
On Wed, Jan 14, 2009 at 10:26 AM, Steven Watanabe <watanabesj@gmail.com>wrote:
Phil Endecott wrote:
It would be good if it were possible to automatically detect whether a floating point type is one for which the cast-to-integer trick works. It would be great if C++ defined some macro or similar that defined whether float and double were IEEE 754 or not. (Hmm, is there some sort of type_traits thing to do this?).
Are you thinking of std::numeric_limits<>::is_iec559?
I've added these static assertions in the casting methods: BOOST_STATIC_ASSERT(sizeof(cast_type) == sizeof(data_type)); BOOST_STATIC_ASSERT(std::numeric_limits<data_type>::is_iec559); BOOST_STATIC_ASSERT(std::numeric_limits<cast_type>::is_integer); That should guarantee I'm casting an IEEE floating-point number to an integer of the same size.
I was imagining that you'd use these to enable a specialisation, e.g. using enable_if, rather than in asserts. Phil.