1 // PR c++/48450 2 // { dg-do compile { target c++11 } } 3 4 namespace std { 5 template <class T> T&& declval(); 6 } 7 8 template<class To, class From, 9 class = decltype(static_cast<To>(std::declval<From>())) 10 > 11 char f(int); 12 13 template<class, class> 14 char (&f(...))[2]; 15 16 struct A { virtual ~A() = 0; }; 17 struct B {}; 18 struct D : B {}; 19 20 static_assert(sizeof(f<A, int>(0)) != 1, "Error"); // a 21 static_assert(sizeof(f<int*, const void*>(0)) != 1, "Error"); // b 22 static_assert(sizeof(f<D*, const B*>(0)) != 1, "Error"); // c 23 static_assert(sizeof(f<int B::*, const int D::*>(0)) != 1, "Error"); // d 24 static_assert(sizeof(f<B, void>(0)) != 1, "Error"); // e 25