Your interpretation is (obviously) correct, and neither Clang nor GCC conform to the standard in this scenario.
This was subject of CWG issue #1774:
The current wording of 15.5.1 [except.terminate] paragraph 2 affords implementations a significant degree of freedom when exception handling results in a call to
std::terminate
:In the situation where no matching handler is found [..]
This contrasts with the treatment of subobjects and objects constructed via delegating constructos in 15.2 [except.ctor] paragraph 2:
An object of any storage duration [..]
Here the destructors must be called. It would be helpful if these requirements were harmonized.
A resolution has been proposed that didn't make it into C++14. Your quote, §15.3/11, will be deleted. Instead, §15.2 will contain
For an object of class type of any storage duration whose initialization or destruction is terminated by an exception, the destructor is invoked for each of the object’s fully constructed subobjects, that is, for each subobject for which the principal constructor (12.6.2) has completed execution and the destructor has not yet begun execution, except that in the case of destruction, the variant members of a union-like class are not destroyed. The subobjects are destroyed in the reverse order of the completion of their construction. Such destruction is sequenced before entering a handler of the function-try-block of the constructor or destructor, if any.
This should eliminate any doubts. Also, note that the changes are already incorporated into the current working draft, N4296.