#include "main.h" #include // std::exception struct Foo { static unsigned object_count; static unsigned object_limit; int dummy; Foo() { #ifdef EIGEN_EXCEPTIONS // TODO: Is this the correct way to handle this? if (Foo::object_count > Foo::object_limit) { throw Foo::Fail(); } #endif ++Foo::object_count; } ~Foo() { --Foo::object_count; } class Fail : public std::exception {}; }; unsigned Foo::object_count = 0; unsigned Foo::object_limit = 0; void test_ctorleak() { typedef DenseIndex Index; Foo::object_count = 0; for(int i = 0; i < g_repeat; i++) { Index rows = internal::random(2,EIGEN_TEST_MAX_SIZE), cols = internal::random(2,EIGEN_TEST_MAX_SIZE); Foo::object_limit = internal::random(0, rows*cols - 2); #ifdef EIGEN_EXCEPTIONS try { #endif Matrix m(rows, cols); #ifdef EIGEN_EXCEPTIONS VERIFY(false); // not reached if exceptions are enabled } catch (const Foo::Fail&) { /* ignore */ } #endif } VERIFY_IS_EQUAL(static_cast(0), Foo::object_count); }