// P0466R5 // { dg-do compile { target c++20 } } namespace std { template struct integral_constant { static constexpr T value = v; }; template struct is_pointer_interconvertible_base_of; template struct is_pointer_interconvertible_base_of : public integral_constant { }; template inline constexpr bool is_pointer_interconvertible_base_of_v = __is_pointer_interconvertible_base_of (T, U); } struct A; struct B { int b; }; struct C : virtual B { int c; }; struct D {}; struct E {}; struct F : public B, D, E {}; struct G : public D, E { int g; }; struct H {}; struct I : public G, H {}; struct J { int j1; private: int j2; }; struct K : public J {}; union U { int a; }; static_assert (std::is_pointer_interconvertible_base_of::value); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (!std::is_pointer_interconvertible_base_of_v); static_assert (!std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (std::is_pointer_interconvertible_base_of_v); static_assert (!std::is_pointer_interconvertible_base_of_v); static_assert (!std::is_pointer_interconvertible_base_of_v);