
Stewart, Robert wrote:
Christian Schladetsch wrote:
On Tue, Oct 20, 2009 at 3:06 AM, Andrey Semashev <andrey.semashev@gmail.com>wrote:
Christian Schladetsch wrote:
Sure, but this is basic C++. Before the ctor to grammar(...) is invoked, the arguments to it have been evaluated. This requires construction of its arguments. That is not true. The base class constructor is called _before_ any members are constructed. Try it yourself.
I am not sure what you are referring to. Before the C++ compiler passes a reference to something, it has constructed it. The example you gave was of a ctor taking a reference. Before that ctor is executed, I will personally guarantee that it and all it's base classes have been constructed.
You can pass a reference to a data member to a base class constructor in a derivate's initializer list. If the base class constructor tries to use the reference, it will result in undefined behavior. (I'm not commenting on the supposed Spirit problem suggested by the OP.)
That is exactly the case suggested by the Spirit2 docs.