#include<iostream.h>

class A {
public:
	int operator==(const A& a) const {return 1;}
	int operator<(const A& a) const {return 1;}
	friend ostream& operator<<(ostream& os, const A& a) {return os;}
};

#define DEFINE_TEMPLATE			// there is some redundancy here.
#include<LINK/basic/ElementOps.h>	// don't know what g++ does with
#include<LINK/basic/List.h>		// included but not instantiated
#include<LINK/basic/MSet.h>		// code.
#undef DEFINE_TEMPLATE

template class ElementOps<A>;
template class List<A>;
template class ListNode<A>;
template class Iterator<A>;
template class SimpleContainer<A>;
template class Container<A>;
template class Collection<A>;
template class MSet<A>;
template ostream operator<<(ostream& os, const Collection<A>&);
template ostream operator<<(ostream& os, const Container<A>&);

main()
{
	A a;
	MSet<A> m;
	m.insert(a);

	cout << m << endl; 
}
