37 static_assert(std::is_standard_layout_v<FrameNodeBase>,
38 "glue base must be standard layout for pointer recovery");
39 static_assert(is_non_virtual_base_v<FrameNodeBase, T>,
40 "glue base must be a non-virtual base of T for pointer recovery");
42 auto &node = *getFrameNode();
44 node.break_apart = breakApartWrap;
45 node.destroy = destroyFrameNodeWrap;
51 derived()
const noexcept
53 return static_cast<const T &
>(*this);
59 return static_cast<T &
>(*this);
65 return &(
reinterpret_cast<const FrameNodeBase *
>(node)->derived());
75 getFrameNode()
const noexcept
81 getFrameNode()
noexcept
99#define GET(node) (*fromFrameNode(node))
104 GET(node).breakApart();
111 T::destroyFrameNode(node);