In a comparison operator:
template
bool operator==(Manager m1, Manager m2) {
return m1.internal_field == m2
template struct Derived_from {
static void constraints(T* p) { B* pb = p; }
Derived_from() { void(*p)(T*) = constraints; }
};
template
bool test(R1& r1) {
Derived_from(); // accept if R1 is derived from R2
return false;
}
class Base {
public:
virtual ~Base() { }
};
class Derived : public Base {
};
class Other {
};
int _tmain(int argc, _TCHAR* argv[])
{
Derived d;
Other o;
test (d); // OK
test (o); // Fails in VC++ 2005
return 0;
}
Credits go to http://www2.research.att.com/~bs/bs_faq2.html#constraints