ISO C++11 mandates that std::unique_ptr<T>::reset() deletes the owned object *after* resetting the pointer to the owned object rather than before as VC10 and VC11 are currently doing.
From 184.108.40.206.5 unique_ptr modifiers:
"Effects: assigns p to the stored pointer, and then if the old value of the stored pointer, old_p, was not
equal to nullptr, calls get_deleter()(old_p). [ Note: The order of these operations is significant
because the call to get_deleter() may destroy *this. —end note ]"
This can cause a problem if the destructor of the owned object calls back to code which attempts to call reset() a second time on the same unique_ptr object resulting in double delete; workaround is to take a local copy of the unique_ptr object rather than use reset().