40 static_assert(std::conjunction_v<std::is_base_of<Node, _T_>...> ,
"All types should subclass Node");
45 template<
typename _To_, std::enable_if_t<knowCore::details::contains_v<_To_, _T_...>,
int> = 0>
48 template<
typename _To_, std::enable_if_t<knowCore::details::contains_v<_To_, _T_...>,
int> = 0>
49 Alternative(_To_* _v) : m_node(_v), m_type(_v->type())
51 NodeType type()
const {
return m_type; }
52 template<
typename _To_, std::enable_if_t<knowCore::details::contains_v<_To_, _T_...>,
int> = 0>
55 return m_node.s_cast<_To_>();
57 bool isValid()
const {
return m_type != NodeType::__Invalid__; }
58 NodeCSP node()
const {
return m_node; }