// PR c++/44907 struct A { }; struct B : public A { }; struct C : public A { }; struct D : public B, public C { }; template struct enable_if { typedef T type; }; template struct enable_if { }; template class mini_is_convertible { typedef char one; typedef struct { char arr[2]; } two; template static void test_aux(To1); template static typename enable_if<(sizeof(test_aux(From1()), 1) > 0), one>::type test(int); template static two test(...); public: static const bool value = sizeof(test(0)) == 1; }; template const bool mini_is_convertible::value; int Test1[mini_is_convertible::value ? -1 : 1]; int Test2[mini_is_convertible::value ? -1 : 1]; int Test3[mini_is_convertible::value ? -1 : 1]; int Test4[mini_is_convertible::value ? -1 : 1];