I think I've found a bug in the boost::lexical_cast<>
library (v1.31.0) on WinXP SP1, MSVC 6.0 (sp5) and
MSVC.NET 2003.
--- Start code snippet ---
#include
#include <iostream>
int main( int argc, char* argv[] )
{
double dMax = = std::numeric_limits< double >::max();
// On a Win32 x86 system, dMax is now 1.7976931348623157e+308
// This is successful and strMax is "1.797693134862316e+308"
std::string strMax = boost::lexical_cast< std::string >( dMax );
try
{
double newDMax = boost::lexical_cast< double >( strMax );
std::cout << "Successfuly" << std::endl;
}
catch ( boost::bad_lexical_cast& )
{
std::cout << "Failed to cast" << std::endl;
}
// On a Win32 x86 system, this always fails,
// because (I think) strMax overflows a double,
// because 1.7976931348623157e+308 is *rounded UP*
// to 1.797693134862316e+308, which cannot be
// represented by a double
}
--- End code snippet ---
-----------------------------------------------------
Leon Raj
Senior Engineer
Invetech Pty. Ltd.
Phone: +61 3 9211 7000 (Switchboard)
+61 3 9211 7938 (DDI)
leon.raj@invetech.com.au
IMPORTANT - This e-mail and any attachments may be
confidential. Any retransmissions, dissemination or
other use of these materials by persons or entities
other than the intended recipient is prohibited.
If received in error, please contact us and delete
all copies. Before opening or using attachments,
check them for viruses and defects. Our liability
is limited to resupplying any affected attachments.
[Any representations or opinions expressed in this
e-mail are those of the individual sender, and not
necessarily those of Vision Systems Limited].