#pragma once
#include <concepts>
#include <cstddef>
#include "renderive/base/node/Multiway_Node.hpp"
template <class Node, class Owner, class Tag = void>
concept Multiway_Node_Type = std::same_as<Node, Multiway_Node<Owner, Tag>> && requires(Node& node, const Node& const_node, Node& child) {
    { node.owner() } -> std::same_as<Owner*>;
    { const_node.owner() } -> std::same_as<const Owner*>;
    { node.parent() } -> std::same_as<Node*>;
    { const_node.parent() } -> std::same_as<const Node*>;
    { const_node.child_count() } -> std::same_as<std::size_t>;
    { node.append_child(child) } -> std::same_as<void>;
    { child.detach() } -> std::same_as<void>;
};
