41 static_assert(std::conjunction_v<std::is_base_of<Node, _T_>...>,
42 "All types should subclass Node");
45 template<
typename _To_>
46 requires knowCore::details::contains_v<_To_, _T_...>
48 : m_node(_v), m_type(_v->type())
51 template<
typename _To_>
52 requires knowCore::details::contains_v<_To_, _T_...>
53 Alternative(_To_* _v) : m_node(_v), m_type(_v->type())
56 NodeType type()
const {
return m_type; }
57 template<
typename _To_>
58 requires knowCore::details::contains_v<_To_, _T_...>
61 return m_node.s_cast<_To_>();
63 bool isValid()
const {
return m_type != NodeType::__Invalid__; }
64 NodeCSP node()
const {
return m_node; }