Moved WIndows leak detector code out of main()
diff --git a/include/catch.hpp b/include/catch.hpp
index 4bf81da..72084c3 100644
--- a/include/catch.hpp
+++ b/include/catch.hpp
@@ -50,6 +50,29 @@
#endif
#ifdef CATCH_IMPL
+
+// !TBD: Move the leak detector code into a separate header
+#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
+#include <crtdbg.h>
+class LeakDetector {
+public:
+ LeakDetector() {
+ int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
+ flag |= _CRTDBG_LEAK_CHECK_DF;
+ flag |= _CRTDBG_ALLOC_MEM_DF;
+ _CrtSetDbgFlag(flag);
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ // Change this to leaking allocation's number to break there
+ _CrtSetBreakAlloc(-1);
+ }
+};
+#else
+class LeakDetector {};
+#endif
+
+LeakDetector leakDetector;
+
#include "internal/catch_impl.hpp"
#endif
diff --git a/include/internal/catch_default_main.hpp b/include/internal/catch_default_main.hpp
index 466efa4..a0c4239 100644
--- a/include/internal/catch_default_main.hpp
+++ b/include/internal/catch_default_main.hpp
@@ -10,23 +10,9 @@
#ifndef __OBJC__
-#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
-#include <crtdbg.h>
-#endif
-
// Standard C/C++ main entry point
int main (int argc, char * argv[]) {
-#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
- int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
- flag |= _CRTDBG_LEAK_CHECK_DF;
- flag |= _CRTDBG_ALLOC_MEM_DF;
- _CrtSetDbgFlag(flag);
- _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
- _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
- // Change this to leaking allocation's number to break there
- _CrtSetBreakAlloc(-1);
-#endif
- int result = Catch::Session().run( argc, argv );
+ int result = Catch::Session().run( argc, argv );
return ( result < 0xff ? result : 0xff );
}