This patch implements C++11 non-static data member initializers (NSDMI), as proposed in http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm and specified by the C++11 standard. For ease of reading, the changes are broken into four patches: 1) Implementation of non-static data member initializers with immediate parsing. This patch was somewhat smaller than it might have been because there was still some code left from when G++ experimented with non-static data member initializers back in the early '90s, though I needed to fix a typo at one point. 2) Implementation of deferred parsing of NSDMI. As with member function bodies and default arguments, names used in an NSDMI can be declared later in the class body, so we need to wait and parse them at the end of the class. 3) Implementation of deferred instantiation of NSDMI. This is not specified by the standard, but seems natural given the other similarities between NSDMI and default arguments. 4) Implementation of core issue 1351 for NSDMI: discussion of this issue at the Bloomington meeting led to general agreement that an NSDMI that can throw should cause an implicitly-declared default constructor to be declared noexcept(false). This patch is currently broken because it conflicts with deferred parsing (#2 above); we can't tell whether the NSDMI throws until we parse it, but we can't parse it until we've completed the class, and declaring the default constructor is part of completing the class. So I've marked the test as XFAIL pending committee direction on this point. Tested x86_64-pc-linux-gnu, applying to trunk.