|
Boost : |
From: Lapshin, Kirill (Kirill.Lapshin_at_[hidden])
Date: 2003-03-24 15:58:42
Hi All,
I was reporting recently that random does not compile on msvc 6; I've seen
another report on the list that it does not work on intel c 7 as well.
The fact that released random library fails to work on these very popular
compilers is rather sad. I did some investigation and nailed down the
problem to following simple example:
template <class U, class T>
class Works
{
BOOST_STATIC_ASSERT(!std::numeric_limits<U>::is_integer);
};
template <class U, class T>
class Fails
{
BOOST_STATIC_ASSERT(!std::numeric_limits<T>::is_integer);
};
The interesting part that it fails to compile even when there is no
instantiation of the template.
In random library this assertion is within #ifndef
BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS #endif directives.
I did a quick search through boost sources and found somewhat similar code
in numeric_traits.hpp, however not a single trick borrowed from there seemed
to work in this case. Should we just disable the assertion for this
particular compiler? Replacing #ifndef
BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS with #if
!defined(BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS) && !(defined(BOOST_MSVC) &&
BOOST_MSVC <= 1300) will solve the compile error. Is this trttd? If there
are no objections, I can make this changes and send patches to someone
willing to apply it to CVS.
Thorsten, was the error you observed on intel 7 related to this one?
__________
Kirill Lapshin
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk