1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// PR c++/51047 // { dg-do compile { target c++11 } } template<typename T> T &&declval(); template<class T> decltype(declval<T>().x) f(T *); template<class T> char f(T); struct B1{ int x; }; struct B2{ int x; }; struct D : public B1, B2{}; struct S { int x; }; int main() { S *p = nullptr; static_assert(sizeof(f(p)) == sizeof(int), ""); D *q = nullptr; static_assert(sizeof(f(q)) == 1u, ""); }