Error :Boost 1.48.0 with latest IBM compiler

Hi All, This post is regarding the issue we saw on IBM compiler using BOOST 1.48 version. Here is the sample code . *********************************Example Code************************************* #include <boost/config/warning_disable.hpp> #include <boost/spirit/include/qi.hpp> #include <boost/spirit/include/phoenix_operator.hpp> #include <boost/spirit/home/phoenix/statement/if.hpp> #include <boost/spirit/home/phoenix/bind/bind_function.hpp> #include <iostream> #include <string> namespace client { namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii; namespace phx = boost::phoenix; struct vars_ : qi::symbols<char, double> { vars_() { add("ans" , 0); } } vars; template <typename Iterator> struct parser : qi::grammar<Iterator, double()> { parser() : parser::base_type(function) { using qi::eps; using qi::lit; using qi::_val; using qi::_1; using ascii::char_; using qi::double_; using qi::string; using qi::lexeme; using boost::phoenix::if_; using qi::alpha; using qi::alnum; MAX = lexeme[string("max") | string("MAX")]; //define max symbol MIN = lexeme[string("min") | string("MIN")]; //define min symbol D = lexeme[string("d") | string("D")]; //define distance symbol function = expression [_val = _1] | declaration | assignment | ( MAX >> "(" >> function [_val = _1]
+(',' >> function [if_(_1 > _val)[_val = _1]]) >> ')') // call : max(function,...) | ( MIN >> "(" >> function [_val = _1]
+(',' >> function [if_(_1 < _val)[_val = _1]]) >> ')') // call : min(function,...) | ( D >> "(" >> (function >> ',' >> function) >> ')'); // call : d(point1,point2) not implemented yet
::result_helper<0,const char [4],boost_1_48_0::spirit::unused_type,boost_1_48_0::spirit::unused_type>". "/usr/include/common/boost/boost/spirit/home/support/terminal.hpp", line 316.16: 1540-0700 (I) The previous message was produced while processing "struct boost_1_48_0::spirit::terminal<struct boost_1_48_0::spirit::tag::char_code<boost_1_48_0::spirit::tag::string,boost_1_48_0::spirit::char_encoding::standard> ::result<const char [4],boost_1_48_0::spirit::unused_type,boost_1_48_0::spirit::unused_type>". "/usr/include/common/boost/boost/spirit/home/support/terminal.hpp", line 248.12: 1540-0700 (I) The previous message was produced while processing "struct boost_1_48_0::spirit::terminal<boost_1_48_0::spirit::tag::char_code<boost_1_48_0::spirit::tag::string,boost_1_48_0::spirit::char_encoding::standard> ". "/usr/include/common/boost/boost/spirit/home/support/common_terminals.hpp",
expression = term [_val = _1] >> *( ('+' >> term [_val += _1]) | ('-' >> term [_val -= _1])); term = factor [_val = _1] >> *( ('*' >> factor [_val *= _1]) | ('/' >> factor [_val /= _1])); factor = double_ [_val = _1] | (vars [_val += _1] ) | '(' >> expression [_val = _1] >> ')' | ('-' >> factor [_val = -_1]) | ('+' >> factor [_val = _1]) | declaration; ; assignment = vars >> '=' >> function; var_decl = lexeme [ qi::raw [ ( alpha >> *( alnum | '_' ) ) - vars ] ] //[ phx::bind(vars.add, _1) ] ; declaration = "var " >> var_decl >> *( ',' >> var_decl ); } qi::rule<Iterator, double()> MAX, MIN, D,expression, term, factor, function, assignment, var_decl, declaration; }; } int main() { typedef std::string::const_iterator iterator_type; typedef client::parser<iterator_type> parser; parser _parser; // Our grammar std::string str; double result; while (std::getline(std::cin, str)) { if (str.empty() || str[0] == 'q' || str[0] == 'Q') break; std::string::const_iterator iter = str.begin(); std::string::const_iterator end = str.end(); bool r = parse(iter, end, _parser, result); if (r && iter == end) { std::cout << "Parsing succeeded\n"; std::cout << "result = " << result << std::endl; } else { std::string rest(iter, end); std::cout << "Parsing failed\n"; } } return 0; } *********************************END************************************************** When we compile this code on IBM with the compiler : IBM XL C/C++ for AIX, V11.1 (5724-X13).Version: 11.01.0000.0009 we end up with below error: xlC -I/usr/include/common/boost -o test2.o -O -c -qnoansialias -qnoro -qchars=signed -q64 -qrtti=all test2.cpp "/usr/include/common/boost/boost/integer_traits.hpp", line 83.56: 1540-0724 (W) The non-type template argument "-1" of type "T" has wrapped. "/usr/include/common/boost/boost/spirit/home/support/terminal.hpp", line 231.13: 1540-0407 (S) The base class "to_nonlazy_arg<const char [4]>" contains a circular reference back to "to_nonlazy_arg<const char [4]>". "/usr/include/boost/boost/spirit/home/support/terminal.hpp", line 288.46: 1540-0700 (I) The previous message was produced while processing "struct boost_1_48_0::spirit::detail::to_nonlazy_arg<const char [4]>". "/usr/include/common/boost/boost/spirit/home/support/terminal.hpp", line 281.16: 1540-0700 (I) The previous message was produced while processing "struct boost_1_48_0::spirit::terminal<struct boost_1_48_0::spirit::tag::char_code<boost_1_48_0::spirit::tag::string,boost_1_48_0::spirit::char_encoding::standard> line 230.1: 1540-0700 (I) The previous message was produced while processing "boost_1_48_0::spirit::standard::string". But this code works absolutely fine on g++ Linux. Is this is a known bug on IBM ?Is any patch available ? Thanks in advance, Abc
participants (1)
-
devika R S