1 // PR c++/44908 2 // { dg-do compile { target c++11 } } 3 4 #include <utility> 5 6 struct A { }; 7 8 struct B 9 : public virtual A { }; 10 11 template<typename From, typename To> 12 class mini_is_convertible 13 { 14 typedef char one; 15 typedef struct { char arr[2]; } two; 16 17 template<typename To1> 18 static void test_aux(To1); 19 20 template<typename To1, typename From1> 21 static decltype(test_aux<To1>(std::declval<From1>()), one()) 22 test(int); 23 24 template<typename, typename> 25 static two test(...); 26 27 public: 28 static const bool value = sizeof(test<To, From>(0)) == 1; 29 }; 30 31 template<typename From, typename To> 32 const bool mini_is_convertible<From, To>::value; 33 34 static_assert (!mini_is_convertible<int (B::*) (int), 35 int (A::*) (int)>::value, ""); 36 static_assert (!mini_is_convertible<int (B::*), int (A::*)>::value, ""); 37 static_assert (!mini_is_convertible<int (A::*) (int), 38 int (B::*) (int)>::value, ""); 39 static_assert (!mini_is_convertible<int (A::*), int (B::*)>::value, ""); 40