In the member initializer list, can I create a reference to a member variable not in the list? : <p>Consider:</p>

<pre><code>#include &lt;string&gt;
#include &lt;iostream&gt;

class Foo
{
     public:
         Foo( char const * msg ) : x( y ) 
         {
             y = msg;
         }

         std::string const &amp; x;

     private:
         std::string y;
};

int main( int argc, char * argv[] )
{
    if ( argc &gt;= 2 )
    {
        Foo f( argv[1] );
        std::cout &lt;&lt; f.x &lt;&lt; std::endl;
    }
}
</code></pre>

<p>This compiles and prints the first parameter... but I have doubts whether it is actually "legal" / well-formed. I know that the initializer list should initialize variables in order of their declaration in the class, lest you reference variables that haven't been initialized yet. But what about member variables <em>not in the initializer list</em>? Can I safely create references to them as showcased?</p>

<p>(The example is, of course, meaningless. It's just to clarify what I am talking about.)</p>
