#include <iostream>
#include <typeinfo>
using namespace std;
struct A { virtual ~A() {}; virtual void foobar() {} };
struct B : A { };
struct C : A { };
struct D : A { };
bool contains_type( A** arr, int ct, const type_info& a ) {
for ( int idx = 0; idx < ct; ++idx ) {
if ( a == typeid(*arr[idx]) )
return true;
}
return false;
}
int main() {
B b;
C c;
D d;
const int ct = 2;
A* arr[ct] = {&b, &c};
cout << contains_type(arr,ct,typeid(B)) << endl;
cout << contains_type(arr,ct,typeid(C)) << endl;
cout << contains_type(arr,ct,typeid(D)) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgQSB7IHZpcnR1YWwgfkEoKSB7fTsgdmlydHVhbCB2b2lkIGZvb2JhcigpIHt9IH07CnN0cnVjdCBCIDogQSB7IH07CnN0cnVjdCBDIDogQSB7IH07CnN0cnVjdCBEIDogQSB7IH07Cgpib29sIGNvbnRhaW5zX3R5cGUoIEEqKiBhcnIsIGludCBjdCwgY29uc3QgdHlwZV9pbmZvJiBhICkgewogICAgZm9yICggaW50IGlkeCA9IDA7IGlkeCA8IGN0OyArK2lkeCApIHsKICAgIAlpZiAoIGEgPT0gdHlwZWlkKCphcnJbaWR4XSkgKQogICAgCQlyZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKCUIgYjsKCUMgYzsKCUQgZDsKCQoJY29uc3QgaW50IGN0ID0gMjsKCUEqIGFycltjdF0gPSB7JmIsICZjfTsKCQoJY291dCA8PCBjb250YWluc190eXBlKGFycixjdCx0eXBlaWQoQikpIDw8IGVuZGw7Cgljb3V0IDw8IGNvbnRhaW5zX3R5cGUoYXJyLGN0LHR5cGVpZChDKSkgPDwgZW5kbDsKCWNvdXQgPDwgY29udGFpbnNfdHlwZShhcnIsY3QsdHlwZWlkKEQpKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=