title: End of lifetime of static object at block scope versus global scope
body: <p>In this passage on program exit from <a href="http://en.cppreference.com/w/cpp/utility/program/exit" rel="nofollow noreferrer">cppreference.com</a></p>
  
  <blockquote>
    <p>If the completion of the constructor or dynamic initialization for thread-local or static object A was sequenced-before thread-local or static object B, the completion of the destruction of B is sequenced-before the start of the destruction of A</p>
  </blockquote>
  
  <p>what is the meaning of "sequenced-before"? </p>
  
  <p>In particular, for this program</p>
  
  <pre><code>struct Object {
    Object() {
    }
    ~Object() {
    }
  };
  
  Object a;
  
  void f() {
    static Object b;
  }
  
  int main() {
    f();
  }
  </code></pre>
  
  <p>is it safe to assume that <code>a.~Object()</code> is called <em>after</em> <code>b.~Object()</code> because <code>a.Object()</code> is called <em>before</em> <code>b.Object()</code>?</p>