title: Order of member initialization list
body: <p>After simplifying my code for many times, I found the following cause the problem.</p>
  
  <pre><code>class B {
  public:
      B(const int x)
                :_x(x) {}
      const int _x;
  };
  
  class C {
  public:
      C(const B&amp; b) 
          : _b(b), _b2(_b._x) {}
      B _b2;       // line 1
      const B&amp; _b; // line 2
  };
  
  int main() {
      B b(1);
      C c(b);
  }
  </code></pre>
  
  <p>Warning (clang 8.0.0)</p>
  
  <pre><code>test16.cpp:11:22: warning: reference '_b' is not yet bound to a value when used here [-Wuninitialized]
          : _b(b), _b2(_b._x) {}
                       ^
  1 warning generated.
  </code></pre>
  
  <p>g++-6 compiles the program. Running the program causes segmentation fault.</p>
  
  <p>Does the initialization of members of a class follows the order of the member initialization list (<code>: _b(b), _b2(_b._x)</code>) or the order of the members in the class (like <code>B _b2; const B&amp; _b;</code>) ?</p>