
grammar( start_type const& start , std::string const& name_ = "unnamed-grammar") => : proto::extends<terminal, base_type>(terminal::make( start.alias())) , name_(name_) {} Here "start" is a reference to a not yet constructed object. No, it's not. "start" is a reference to a well-formed object - or at least to an object that is defined in user-space as well formed. My argument is based on this premise, and this alone: 'start' is fully created before it it used by the grammar. If this is not true, please speak to Stroustrup. If it is true, then I am right and I take no pleasure from it. I don't think you're unable to grasp what I am saying, and I am sure you think there is a problem. But I just don't see it. I don't care about the details: the fact is that if you are taking a reference then that object has been well formed or you are doing something silly. Regards, Christian