Destruction of objects with static storage duration
<p>Consider the following program.</p>

<pre><code>struct s { ~s(); };
void f()
{
    static s a;
}

struct t { ~t() { f(); } };
int main()
{
    static s b;
    static t c;
}
</code></pre>

<p>I'm trying to figure out what exactly the standard guarantees with respect to the destruction of static objects, but I'm finding the text of C++03[basic.start.term] rather insufficient.</p>

<p>Is the behavior of the program defined? If so, what is the order of destruction of the static objects <code>a</code>, <code>b</code> and <code>c</code>? What would happen if <code>s::~s</code> threw an exception? Please explain your reasoning, preferably with quotes from the standard.</p>
