|
Boost Users : |
From: Joel de Guzman (djowel_at_[hidden])
Date: 2003-09-18 10:48:48
---- Original Message ----
From: Fritz Birnbacher
> Hello,
>
> I am new in using boost and I played a little bit with the spirit library.
>
> I tried following code using MSVC 7.1 and boost 1.30.2
>
> #include"stdafx.h"
> #include<spirit.hpp>
>
> using namespace boost::spirit;
>
> rule<> GetRule()
>
> rule<> r = anychar_p;
> return r;
>
>
> void Parse1()
>
> char s[] = "ABCD";
> parse(s, GetRule());
>
>
> void Parse2()
>
> rule<> r = anychar_p;
> char s[] = "ABCD";
> parse(s,r);
>
>
> int _tmain()
>
> Parse1();
> return 0;
>
>
>
> Parse1() throws an exception (access violation)
>
> Parse2() works correct.
>
>
> Is it a compiler problem or a problem in spirit or my problem ?
Neither.
You should not return rules from functions. Rules cannot be passed
by value. The copy and assignment operators do not follow the
standard C++ object behavior. Instead, you wrap rules inside grammars
and pass the grammar around.
For that matter, v1.7 has the notion of stored_rule(s) which, unlike
the rule, has C++ ctor/assign semantics, hence, can be passed around,
stored inside containers, etc.
HTH.
BTW, Spirit has its own mailing list:
Spirit-general mailing list
Spirit-general_at_[hidden]
https://lists.sourceforge.net/lists/listinfo/spirit-general
I took the liberty of cross-posting this there. See you there.
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net