Boost logo

Boost :

From: Terje Slettebø (tslettebo_at_[hidden])
Date: 2003-03-18 14:51:16


>From: "Beman Dawes" <bdawes_at_[hidden]>

> My patience has been exhausted. The folks that care about configuring
> lexical_cast for GCC 2.95.3 with the SGI library need come forward
> immediately and tell us how to deal with this, or 1.30.0 will ship as is.

I've applied John Maddock's suggestion to my local copy of the version in
CVS, and ran some tests. Preliminary results are good, and are listed at the
end, here.

I've tested it on Intel C++ 7.0, MSVC 6, and g++ 3.2 (MinGW). Could somebody
test the attached files on g++ 2.95.x? Genny?

There are also some other changes, and I list them below. The current
version in the CVS is very restrictive with wide character support, meaning
you can't use it with wide characters on platforms that would otherwise be
able to handle it. This includes Intel C++ 7.0 (on Windows) and MSVC 6.

The restriction was done to remedy the failing regression tests. However,
with John's suggestion, you get a pass _and_ wide character support for
those platforms that can handle it, regardless of whether they have
intrinsic wchar_t.

The changes are
-----------------------
- Changed "#include <boost/type_traits.hpp>" to "#include
<boost/type_traits/is_pointer.hpp>", as it's the only trait used. This
removes a lot of includes, and therefore dependencies with the type traits.
Kevlin has agreed to this suggestion.

- Removed duplicate tests. Since tests for "const char *" and "char *" for
source were merged to just using string literal for source, some tests ended
up as duplicates. These duplicates have been removed, bringing the number of
tests down from 171 to 137. This is also agreed to by Kevlin.

- With wide character support in lexical_cast enabled for MSVC 6, three
tests (of 137) fail. These are omitted for that compiler version, using
BOOST_WORKAROUND and BOOST_TESTED_AT.

They failing tests are related to that wchar_t is a typedef for unsigned
short on MSVC 6. They are:

BOOST_CHECK_THROW(lexical_cast<wchar_t>(123), boost::bad_lexical_cast);
BOOST_CHECK_THROW(lexical_cast<wchar_t>(L"Test"), boost::bad_lexical_cast);
BOOST_CHECK_THROW(lexical_cast<wchar_t>(std::wstring(L"Test")),
boost::bad_lexical_cast);

Test results for the attached files
--------------------------------------------
Intel C++ 7.0 (strict mode, intrinsic wchar_t enabled) - 137/137 passes
MSVC 6 (no intrinsic wchar_t) -
134/137 passes (3/137 omitted, the ones above, or they would fail)
g++ 3.2 (MinGW) (Not proper wide character support) - 82/137 (the rest
omitted by the wide character disabling)

As mentioned, with the current version in CVS, Intel C++ 7.0 and MSVC 6 only
gets pass on about half of total tests, since wide character support is
disabled in lexical_cast for them, even though, as shown above, they handle
it very well.

However, not at least, it's a question of whether this version fares better
on g++ 2.95.x.

Regards,

Terje





Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk