What comes first - stack unwinding or copying of return values
<p>Is the mutex used in method <code>GetValues()</code> released <strong>before</strong> or <strong>after</strong> copy constructing the <code>dummy</code> instance?</p>

<pre><code>class Protect
{};

class Test
{
public:
    Protect GetValues() const;

private:
    Protect m_protVal;
    Mutex m_mutex;
};

Protect Test::GetValues() const
{
    CLockGuard lock(m_mutex);

    return m_protVal;
}

int main(int argc, char** argv)
{
    Test myTestInstance;

    Protect dummy = myTestInstance.GetValues();
}
</code></pre>

<p>Let's assume <code>CLockGuard</code> and <code>Mutex</code> are standard classes provided with boost lib.</p>
