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

Reply via email to