// PR c++/57599 // { dg-do compile { target c++11 } } struct A { }; struct B : public A { }; template struct is_same { static constexpr bool value = false; }; template struct is_same { static constexpr bool value = true; }; template T val(); static_assert(is_same(val())), A*>::value, "Ouch"); static_assert(is_same(val())), A&>::value, "Ouch"); static_assert(is_same(val())), const A*>::value, "Ouch"); static_assert(is_same(val())), const A&>::value, "Ouch"); static_assert(is_same(val())), volatile A*>::value, "Ouch"); static_assert(is_same(val())), volatile A&>::value, "Ouch"); static_assert(is_same(val())), const volatile A*>::value, "Ouch"); static_assert(is_same(val())), const volatile A&>::value, "Ouch");