#include <cstdio>
#include <cstdlib>
int objCount = 0;
struct Thing
{
int count;
Thing ();
Thing (Thing const &src);
~Thing ();
};
Thing::Thing ()
:count (0)
{
objCount++;
std::printf ("%p %s\n", (void *)this,__PRETTY_FUNCTION__);
}
Thing::Thing (Thing const &src)
:count (0)
{
objCount++;
std::printf ("%p %s\n", (void *)this, __PRETTY_FUNCTION__);
}
Thing::~Thing ()
{
std::printf ("%p %s\n", (void *)this, __PRETTY_FUNCTION__);
if (count)
std::abort ();
count--;
objCount--;
}
void x(Thing name)
{
}
class Base
{
public:
virtual void test(const Thing& s) = 0;
};
class Impl : virtual public Base
{
public:
virtual void test(const Thing& s)
{
x(s); }
};
int main()
{
Impl *impl = new Impl();
impl->test( Thing ()); return objCount != 0;
}