You have a dangling reference to a rule here:
const rule<>& parser;
when you do this:
const Configurable cfg = { "Hardtest", +( __ ) };
+( __ ) creates a temporary rule and you assign the address of that to cfg.parser.
I thought I bound the temporary to a const reference, so the temporary lives as long as the reference lives, like in this example: std::string& s = std::string("Foo") + "Bar";
Remove the reference:
const rule<> parser;
Keep in mind though that "classic" spirit rules are not copyable. So don't go and copy your cfg around.
That's why I want to use references, to avoid copying rules around. I solved the problem by writing // unchanged: struct Configurable { const char* name; const rule<>& rule; }; // make an explicit object here, not a bound temporary: const rule<> myRule = +(__)>>(...); // bound the reference to the copy: const Configurable cfg = {"Name", myRule }; and it seems to work. :-) Lars R.