title: What happens if a throw; statement is executed outside of catch block?
body: <p>In C++ <code>throw;</code> when executed inside a catch block rethrows the currently caught exception outside the block.</p>
  
  <p>In <a href="https://stackoverflow.com/questions/980149/several-catch-blocks-or-one-with-dynamiccast/980347#980347">this answer</a> an idea of exception dispatcher is brought up as a solution to reducing code duplication when using complex exception handling often:</p>
  
  <pre><code>try {
      CodeThatMightThrow();
  } catch(...) {
      ExceptionHandler();
  }
  
  void ExceptionHandler()
  {
      try {
          throw;
      } catch( FileException* e ) {
          //do handling with some complex logic
          delete e;
      } catch( GenericException* e ) {
          //do handling with other complex logic
          delete e;
      }
  }
  </code></pre>
  
  <p>Throwing a pointer or a value doesn't make any difference so it's out of the question.</p>
  
  <p>What happens if ExceptionHandler() is called not from a catch block?</p>
  
  <p>I tried this code with VC7:</p>
  
  <pre><code>int main( int, char** )
  {   
      try {
          throw;
      } catch( ... ) {
          MessageBox( 0, "", "", 0 );
      }
      return 0;
   }
  </code></pre>
  
  <p>First it causes the debugger to indicate a first-chance exception, then immediately an unhandled exception. If I run this code outside the debugger the program crashes the same way as if abort() has been called.</p>
  
  <p>What is the expected behaviour for such situations?</p>