The people who wrote the standard have thought of this case, and the bad news is that it is forbidden:
12.7 Construction and destruction
1 - For an object with a non-trivial constructor, referring to any non-static member or base class of the object before the constructor begins execution results in undefined behavior. [...]
There is an example given that is pretty close to your code:
struct W { int j; };
struct X : public virtual W { };
struct Y {
int *p;
X x;
Y() : p(&x.j) { // undefined, x is not yet constructed
}
};
In that case, the undefined behaviour is forming a pointer to a member of a not-yet-constructed member; forming a reference to a member is similar enough.
I think it's pretty clear that in order to pass the reference into your constructor, you'd have to take the reference (to the member of the object) before the constructor begins execution.