title: Destruction Order of Meyers Singletons
body: <p>To the following code:</p>
  
  <pre><code>class C {
  public:    
      static C&amp; Instance() {
         static C c;
         return c;
      }
  
     ~C(){std::cout &lt;&lt; "c destructed\n";}
  private:
     C(){}
  };
  
  class D{//similar to C but prints `d destructed` on destruction
  //...
  
  int main()
  {
      auto c = C::Instance();
      auto d = D::Instance();
  }
  //outputs (with gcc)
  //d destructed
  //c destructed
  //d destructed
  //c destructed
  </code></pre>
  
  <p>I have a couple of questions:</p>
  
  <ol>
  <li>Is the order of destruction calls well defined? (even if class C and D are defined in different source-files)</li>
  <li>If it is well defined is this behaviour portable?</li>
  </ol>