Opened 14 years ago
Closed 13 years ago
#2234 closed Bugs (fixed)
Spirit2/Phoenix compilation error (front on iterator_range)
| Reported by: | Owned by: | Joel de Guzman | |
|---|---|---|---|
| Milestone: | Boost 1.37.0 | Component: | spirit |
| Version: | Boost 1.36.0 | Severity: | Regression |
| Keywords: | spirit phoenix action attribute const front iterator_range | Cc: |
Description
The following source:
#include <boost/spirit/include/qi.hpp>
using namespace ::boost::spirit;
using namespace ::boost::spirit::qi;
using namespace ::boost::spirit::arg_names;
#include <boost/spirit/include/phoenix_stl.hpp>
using namespace ::boost::phoenix;
int main()
{
rule< const wchar_t* > r;
r = raw[ wchar ][ front(_1) ];
return 0;
}
worked several months ago (before Spirit2 was brought in Boost svn), but no longer compiles with current svn-trunk, gcc gives the following error:
.../boost/spirit/home/phoenix/stl/container/detail/container.hpp:42:
error: no type named ‘const_reference’
in ‘const class boost::iterator_range<const wchar_t*>’
It seems due to r44555 which made attributes const in actions, as boost::iterator_range does not contain a const_reference typedef.
Note that replacing front with *begin works around the problem, since boost::iterator_range does contain a const_iterator typedef.
I don't know enough about iterator_range and Phoenix type deduction to know in which one this should be fixed... please tell me if I should submit a feature request ticket to add a const_reference typedef to iterator_range.
Change History (4)
comment:1 by , 14 years ago
comment:2 by , 13 years ago
I think this has been fixed somewhere. The following compiles:
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/qi_char_.hpp>
using namespace ::boost::spirit;
using namespace ::boost::spirit::qi;
#include <boost/spirit/include/phoenix_stl.hpp>
using namespace ::boost::phoenix;
int main()
{
rule< const wchar_t* > r;
r = raw[ char_ ][ front(_1) ];
return 0;
}
comment:3 by , 13 years ago
I can confirm that the code in the second comment compiles [ Mac OS X 10.6.2 / gcc 4.2.1/ boost trunk ], but the original poster's code does not.
junk.cpp:4: error: ‘arg_names’ is not a namespace-name junk.cpp:4: error: expected namespace-name before ‘;’ token junk.cpp: In function ‘int main()’: junk.cpp:12: error: ‘wchar’ was not declared in this scope
comment:4 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |

Re:
Perhaps it's a good idea to minimize the problem to something that calls
iterator_rangedirectly and ask the author (Thorsten Ottosen & Pavol Droba) about it on the devel list.