2010-11-09 23:24:00 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   Created  by  Phil  on  18 / 10 / 2010. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   Copyright  2010  Two  Blue  Cubes  Ltd .  All  rights  reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   Distributed  under  the  Boost  Software  License ,  Version  1.0 .  ( See  accompanying 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   file  LICENSE_1_0 . txt  or  copy  at  http : //www.boost.org/LICENSE_1_0.txt)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_result_builder.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-02 19:58:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_message.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2011-01-11 09:13:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_interfaces_capture.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-03 18:52:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_debugger.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-28 08:03:28 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_common.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-23 06:51:58 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_tostring.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_interfaces_runner.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-04 07:08:53 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "catch_compiler_capabilities.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-22 08:19:17 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-14 15:35:12 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if defined(CATCH_CONFIG_FAST_COMPILE) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// We can speedup compilation significantly by breaking into debugger lower in
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// the callstack, because then we don't have to expand CATCH_BREAK_INTO_DEBUGGER
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// macro in each assertion
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_REACT( resultBuilder ) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    resultBuilder . react ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 13:21:40 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Another way to speed-up compilation is to omit local try-catch for REQUIRE*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// macros.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// This can potentially cause false negative, if the test code catches
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// the exception before it propagates back up to the runner.
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-21 13:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_TEST_NO_TRY( macroName, resultDisposition, expr ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 13:21:40 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # expr ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 21:12:06 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        __catchResult . setExceptionGuard ( ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 13:21:40 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        (  __catchResult  < =  expr  ) . endExpression ( ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 21:12:06 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        __catchResult . unsetExceptionGuard ( ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 13:21:40 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : isTrue (  false  & &  static_cast < bool > (  ! ! ( expr )  )  )  )  // expr here is never evaluated at runtime but it forces the compiler to give it a look
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-21 13:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CHECK_THAT_NO_TRY( macroName, matcher, resultDisposition, arg ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 13:21:40 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # arg  " ,  "  # matcher ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-29 21:12:06 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        __catchResult . setExceptionGuard ( ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        __catchResult . captureMatch (  arg ,  matcher ,  # matcher  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        __catchResult . unsetExceptionGuard ( ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 13:21:40 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-14 15:35:12 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 20:00:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// In the event of a failure works out if the debugger needs to be invoked
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// and/or an exception thrown and takes appropriate action.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// This needs to be done as a macro so the debugger will stop in the user
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// source code rather than in Catch library code
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_REACT( resultBuilder ) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if (  resultBuilder . shouldDebugBreak ( )  )  CATCH_BREAK_INTO_DEBUGGER ( ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-02-14 15:35:12 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    resultBuilder . react ( ) ;  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-27 20:49:19 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-10-24 21:59:47 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-26 16:10:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_TEST( macroName, resultDisposition, ... ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-04-26 16:10:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # __VA_ARGS__ ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        try  {  \
							 
						 
					
						
							
								
									
										
										
										
											2016-02-29 08:01:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS  \
							 
						 
					
						
							
								
									
										
										
										
											2017-04-26 16:10:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            (  __catchResult  < =  __VA_ARGS__  ) . endExpression ( ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 09:38:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        catch (  . . .  )  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-01-15 20:28:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . useActiveException (  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
									
										
										
										
											2017-04-26 16:10:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : isTrue (  false  & &  static_cast < bool > (  ! ! ( __VA_ARGS__ )  )  )  )  // the expression here is never evaluated at runtime but it forces the compiler to give it a look
 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-30 11:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&.
 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-09 23:24:00 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-02-10 08:30:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_IF( macroName, resultDisposition, ... ) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    INTERNAL_CATCH_TEST (  macroName ,  resultDisposition ,  __VA_ARGS__  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-11-13 09:44:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if (  Catch : : getResultCapture ( ) . getLastResult ( ) - > succeeded ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-02-10 08:30:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_ELSE( macroName, resultDisposition, ... ) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    INTERNAL_CATCH_TEST (  macroName ,  resultDisposition ,  __VA_ARGS__  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-11-13 09:44:52 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if (  ! Catch : : getResultCapture ( ) . getLastResult ( ) - > succeeded ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-02-10 08:30:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-03-14 08:45:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, ... ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # __VA_ARGS__ ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        try  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            static_cast < void > ( __VA_ARGS__ ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . captureResult (  Catch : : ResultWas : : Ok  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        catch (  . . .  )  {  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . useActiveException (  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2011-03-14 08:45:55 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 20:00:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_THROWS( macroName, resultDisposition, matcher, ... ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # __VA_ARGS__ ,  resultDisposition ,  # matcher  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 18:11:31 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if (  __catchResult . allowThrows ( )  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            try  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-05-03 19:10:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                static_cast < void > ( __VA_ARGS__ ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 18:11:31 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                __catchResult . captureResult (  Catch : : ResultWas : : DidntThrowException  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            catch (  . . .  )  {  \
							 
						 
					
						
							
								
									
										
										
										
											2015-07-15 23:02:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                __catchResult . captureExpectedException (  matcher  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 18:11:31 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . captureResult (  Catch : : ResultWas : : Ok  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 20:00:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-21 13:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_THROWS_AS( macroName, exceptionType, resultDisposition, expr ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-02-09 12:41:16 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # expr  " ,  "  # exceptionType ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 18:11:31 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if (  __catchResult . allowThrows ( )  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            try  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-01-31 18:02:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                static_cast < void > ( expr ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 18:11:31 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                __catchResult . captureResult (  Catch : : ResultWas : : DidntThrowException  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
									
										
										
										
											2017-03-23 21:11:21 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            catch (  exceptionType  )  {  \
							 
						 
					
						
							
								
									
										
										
										
											2014-06-05 18:11:31 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                __catchResult . captureResult (  Catch : : ResultWas : : Ok  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            catch (  . . .  )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                __catchResult . useActiveException (  resultDisposition  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . captureResult (  Catch : : ResultWas : : Ok  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-09 23:24:00 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-02-02 19:58:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-21 13:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    # define INTERNAL_CATCH_MSG( macroName, messageType, resultDisposition, ... ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-12 23:02:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        do  {  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  " " ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-29 07:50:19 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult  < <  __VA_ARGS__  +  : : Catch : : StreamEndStop ( ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . captureResult (  messageType  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-09 23:24:00 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-02-03 20:00:46 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-21 13:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_INFO( macroName, log ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-28 17:09:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    Catch : : ScopedMessage  INTERNAL_CATCH_UNIQUE_NAME (  scopedMessage  )  =  Catch : : MessageBuilder (  macroName ,  CATCH_INTERNAL_LINEINFO ,  Catch : : ResultWas : : Info  )  < <  log ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-02 19:58:04 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-04 11:14:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-21 13:22:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define INTERNAL_CHECK_THAT( macroName, matcher, resultDisposition, arg ) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 00:15:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # arg  " ,  "  # matcher ,  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        try  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-01-09 13:23:10 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . captureMatch (  arg ,  matcher ,  # matcher  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  catch (  . . .  )  {  \
							 
						 
					
						
							
								
									
										
										
										
											2017-06-06 15:12:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            __catchResult . useActiveException (  resultDisposition  ) ;  \
							 
						 
					
						
							
								
									
										
										
										
											2012-10-29 19:55:13 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  \
							 
						 
					
						
							
								
									
										
										
										
											2014-05-28 18:53:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-04 11:14:21 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-05 18:40:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								///////////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define INTERNAL_CATCH_THROWS_MATCHES( macroName, exceptionType, resultDisposition, matcher, expr ) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    do  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Catch : : ResultBuilder  __catchResult (  macroName ,  CATCH_INTERNAL_LINEINFO ,  # expr  " ,  "  # exceptionType ,  resultDisposition ,  # matcher  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if (  __catchResult . allowThrows ( )  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            try  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                static_cast < void > ( expr ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                __catchResult . captureResult (  Catch : : ResultWas : : DidntThrowException  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            catch (  exceptionType  ex  )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                __catchResult . captureMatch (  ex ,  matcher ,  # matcher  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            catch (  . . .  )  {  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                __catchResult . useActiveException (  resultDisposition  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            __catchResult . captureResult (  Catch : : ResultWas : : Ok  ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        INTERNAL_CATCH_REACT (  __catchResult  )  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while (  Catch : : alwaysFalse ( )  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-11-09 23:24:00 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# endif  // TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED