int
main()
{
	A* obj = jnew D();
	obj->foo();
	B* b = dynamic_cast<B*>(obj);
	b->foo();
	D* d = dynamic_cast<D*>(obj);
	d->foo();

	t1.Listen(&t3);
	t2.Listen(&t3);
	JOrderedSetT::Sorted msg;
	t3.Bcast(msg);

	Test* t4 = &t1;
	std::cout << t4 << std::endl;
	clearPointer((void*) &t4);
	std::cout << t4 << std::endl;

	return 0;
}