Proposed resolution (June, 2014): Add the following after 9.5.2 [dcl.init.aggr] paragraph 7:
If a reference member is initialized from its
brace-or-equal-initializer and a potentially-evaluated
subexpression thereof is an aggregate initialization that would
use that brace-or-equal-initializer, the program is
ill-formed. [Example: If an aggregate class C contains a subaggregate... Delete the first bullet of 6.8.7 [class.temporary] paragraph 5:
The second context is when a reference is bound to a
temporary.117 The temporary to which the reference is
bound or the temporary that is the complete object of a subobject
to which the reference is bound persists for the lifetime of the
reference except: ... Insert the following as a new paragraph after
11.9.3 [class.base.init] paragraph 7: A temporary expression bound to a reference member in
a mem-initializer is ill-formed. [Example: —end example] In a non-delegating constructor, if a given potentially
constructed subobject... Insert the following as a new paragraph after
11.9.3 [class.base.init] paragraph 9: A temporary expression bound to a reference member from
a brace-or-equal-initializer is
ill-formed. [Example: —end example] In a non-delegating constructor, the destructor for each
potentially constructed subobject... This resolution also resolves issue 1815.
struct A;
extern A a;
struct A {
const A& a1 { A{a,a} }; // OK
const A& a2 { A{} }; // error
};
A a{a,a}; // OK
A temporary bound to a reference member in a
constructor's ctor-initializer
(11.9.3 [class.base.init]) persists until the constructor
exits.
struct A {
A() : v(42) { } // error
const int& v;
};
struct A {
A() = default; // OK
A(int v) : v(v) { } // OK
const int& v = 42; // OK
};
A a1; // error: ill-formed binding of temporary to reference
A a2(1); // OK, unfortunately
Presumably a temporary bound to a reference in a non-static data member
initializer should be treated analogously with what happens in a
ctor-initializer, but the current wording of
6.8.7 [class.temporary] paragraph 5 is not clear on this point. See also issue 1815 for similar questions
regarding aggregate initialization.