Opened 9 years ago
Closed 8 years ago
#8774 closed Bugs (fixed)
use of dectype in result_of gives errors in spirit parser on gcc-4.8.1
| Reported by: | Owned by: | Joel de Guzman | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | spirit |
| Version: | Boost 1.54.0 | Severity: | Regression |
| Keywords: | Cc: |
Description
The following snippet compiles and runs fine on boost-1.53 and earlier using gcc-4.8.1, but fails to compile on boost-1.54.
//#define BOOST_RESULT_OF_USE_TR1
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
int main()
{
namespace qi = boost::spirit::qi;
qi::rule<const char *, void(int &)> foo = qi::int_[qi::_r1 = qi::_1];
qi::rule<const char *, int()> start = foo(qi::_val);
const char *beg = "5",
*end = beg+strlen(beg);
int val;
if(parse(beg, end, start, val))
std::cout << val << std::endl;
else
std::cout << "error";
}
The compile error output is attached to this ticket. The error goes away by uncommenting the first line.
It seems that boost-1.54 enables by default the use of decltype in the implementation of boost::result_of but it isn't doing what it's suppose to do.
Attachments (1)
Change History (4)
by , 9 years ago
| Attachment: | errors.txt added |
|---|
comment:1 by , 9 years ago
Same here. my code that compiles OK with STL's distro9.2(gcc4.7.1 +boost 1.5.0) yields errors regarding result_of when compiling with distro 11.1(gcc 4.8.1 +boost 1.54). Adding -DBOOST_RESULT_OF_USE_TR1 to g++ fixes the problem.
comment:2 by , 8 years ago
This bug seems fixed in Boost 1.56.0. The above code compiles under RHEL 7 (gcc 4.8.2) in C++98 and C++11 mode.
comment:3 by , 8 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Confirmed. This has been fixed. I'm closing this now.

gcc-4.8.1 compile output with errors