|
Boost : |
From: Dick Bridges (dbridges_at_[hidden])
Date: 2006-01-30 12:21:51
One of our compilers is giving a warning and I cannot understand
why. Maybe I'm missing a #define somewhere? I don't understand
how the compiler got past the BOOST_MPL_ASSERT_RELATION macros to
even "see" the offending line.
Given the following code:
#include <boost/xpressive/xpressive.hpp>
using namespace boost::xpressive;
int main(int argc, char **argv) {
sregex re_ = (*_ >> "CALL" >> *_ >> "CONNECTED" >> *_);
return(0);
}
gcc (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2)
compiles and links successfully with no warnings.
On the other hand, our [arm-softfloat-linux-gnu-gcc
(GCC) 3.3.3] compiler gives the following warnings:
Building file: ../main.cpp
arm-softfloat-linux-gnu-g++ -D_REENTRANT -DARCH=ARM
-I/usr/local/boost_1_33_1
-O3 -Wall -c -fmessage-length=0 -Wno-non-virtual-dtor
-omain.o ../main.cpp
[snip...snip,snip...snip]
../main.cpp:7: instantiated from here
/usr/local/boost_1_33_1/boost/xpressive/traits/cpp_regex_traits.hpp:241:
warning: comparison is always false due to limited range of data
type
/usr/local/boost_1_33_1/boost/xpressive/traits/cpp_regex_traits.hpp:241:
warning: comparison is always false due to limited range of data type
Finished building: ../main.cpp
Building target: parse_warning
arm-softfloat-linux-gnu-g++ -o parse_warning main.o
Finished building: parse_warning
Build complete for project parse_warning
Here is the "offending" code:
static bool is_newline(Char ch)
{
BOOST_MPL_ASSERT_RELATION('\r', ==, L'\r');
BOOST_MPL_ASSERT_RELATION('\n', ==, L'\n');
BOOST_MPL_ASSERT_RELATION('\f', ==, L'\f');
241 ==> return L'\r' == ch || L'\n' == ch || L'\f' == ch
|| (1 < SizeOfChar && (0x2028u == ch || 0x2029u == ch ||
0x85u == ch));
}
Thanks for your time. Any assistance you could provide would be greatly
appreciated.
Regards,
Dick Bridges
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk