blob: d23bf896964e1e14331b65a29bdb6d18a98bed14 [file] [log] [blame]
// C++26 P3533R2 - constexpr virtual inheritance
// { dg-do compile { target c++26 } }
#define M(N, P1, P2, P3, P4, P5, P6, N1, N2, N3) \
struct S##N { \
int a, b; \
constexpr S##N () : a (0), b (0) {} \
constexpr virtual int bar (int) { return 0; } \
}; \
struct T##N : virtual P1 S##N { \
int c, d; \
constexpr T##N () : c (0), d (0) {} \
}; \
struct U##N : virtual P2 S##N, virtual P3 T##N { \
int e; \
constexpr U##N () : e (0) {} \
}; \
struct V##N : virtual P4 S##N, virtual P5 T##N, virtual P6 U##N { \
int f; \
constexpr V##N () : f (0) {} \
constexpr const S##N *foo () const { return (const S##N *)this; } \
}; \
constexpr V##N v##N; \
static_assert (N1 !!dynamic_cast<const V##N *> (v##N.foo ())); \
static_assert (N2 !!dynamic_cast<const T##N *> (v##N.foo ())); \
static_assert (N3 !!dynamic_cast<const U##N *> (v##N.foo ()));
M(0, public, public, public, public, public, public, , , )
M(1, private, public, public, public, public, public, , , )
M(2, public, private, public, public, public, public, , , )
M(3, private, private, public, public, public, public, , , )
M(4, public, public, private, public, public, public, , , )
M(5, private, public, private, public, public, public, , , )
M(6, public, private, private, public, public, public, , , )
M(7, private, private, private, public, public, public, , , )
M(8, public, public, public, private, public, public, , , )
M(9, private, public, public, private, public, public, , , )
M(10, public, private, public, private, public, public, , , )
M(11, private, private, public, private, public, public, !, !, !)
M(12, public, public, private, private, public, public, , , )
M(13, private, public, private, private, public, public, , , )
M(14, public, private, private, private, public, public, , , )
M(15, private, private, private, private, public, public, !, !, !)
M(16, public, public, public, public, private, public, , , )
M(17, private, public, public, public, private, public, , , )
M(18, public, private, public, public, private, public, , , )
M(19, private, private, public, public, private, public, , , )
M(20, public, public, private, public, private, public, , !, )
M(21, private, public, private, public, private, public, , !, )
M(22, public, private, private, public, private, public, , !, )
M(23, private, private, private, public, private, public, , !, )
M(24, public, public, public, private, private, public, , , )
M(25, private, public, public, private, private, public, , , )
M(26, public, private, public, private, private, public, , , )
M(27, private, private, public, private, private, public, !, !, !)
M(28, public, public, private, private, private, public, , !, )
M(29, private, public, private, private, private, public, , !, )
M(30, public, private, private, private, private, public, !, !, !)
M(31, private, private, private, private, private, public, !, !, !)
M(32, public, public, public, public, public, private, , , !)
M(33, private, public, public, public, public, private, , , !)
M(34, public, private, public, public, public, private, , , !)
M(35, private, private, public, public, public, private, , , !)
M(36, public, public, private, public, public, private, , , !)
M(37, private, public, private, public, public, private, , , !)
M(38, public, private, private, public, public, private, , , !)
M(39, private, private, private, public, public, private, , , !)
M(40, public, public, public, private, public, private, , , !)
M(41, private, public, public, private, public, private, !, !, !)
M(42, public, private, public, private, public, private, , , !)
M(43, private, private, public, private, public, private, !, !, !)
M(44, public, public, private, private, public, private, , , !)
M(45, private, public, private, private, public, private, !, !, !)
M(46, public, private, private, private, public, private, , , !)
M(47, private, private, private, private, public, private, !, !, !)
M(48, public, public, public, public, private, private, , !, !)
M(49, private, public, public, public, private, private, , !, !)
M(50, public, private, public, public, private, private, , !, !)
M(51, private, private, public, public, private, private, , !, !)
M(52, public, public, private, public, private, private, , !, !)
M(53, private, public, private, public, private, private, , !, !)
M(54, public, private, private, public, private, private, , !, !)
M(55, private, private, private, public, private, private, , !, !)
M(56, public, public, public, private, private, private, !, !, !)
M(57, private, public, public, private, private, private, !, !, !)
M(58, public, private, public, private, private, private, !, !, !)
M(59, private, private, public, private, private, private, !, !, !)
M(60, public, public, private, private, private, private, !, !, !)
M(61, private, public, private, private, private, private, !, !, !)
M(62, public, private, private, private, private, private, !, !, !)
M(63, private, private, private, private, private, private, !, !, !)