Don wrote:
Andrei Alexandrescu wrote:
Walter Bright wrote:
Brad Roberts wrote:
Walter Bright wrote:
Rory McGuire wrote:
I would think that if a method in a class throws then at least the
class' invariant should be run? does it?
No.

Do you consider that broken or correct?


Not sure.

TDPL says that in non-release mode, public methods have code instrumented like this:

class C {
   void m() {
      __check_invariant();
      scope(exit) __check_invariant();
      ... body ...
   }
}

My understanding after a recent discussion to Walter focused on the topic is that in case a non-Exception Error is thrown, scope(exit) statements are not guaranteed to be executed, as aren't destructors of local objects and finally clauses.


Andrei

There are worse problems than that...
At present, scope(exit) isn't executed if it's preceded by a label (!). And if the scope consists of a single declaration, the compiler will ICE if there is a destructor. Deterministic destruction is still horribly broken.


Ouch. Well, at least these are problems we all agree what the fix should be.

Andrei

Reply via email to