#include #include template struct Node { T value; std::unique_ptr> next; }; template std::size_t countStep(const std::unique_ptr>& node, std::size_t i) { return (node) ? countStep(node->next, i + 1) : i; } template std::size_t count(const std::unique_ptr>& head) { return countStep(head, 0); } int main() { using NodeT = Node; auto head = std::make_unique(NodeT{5, nullptr}); head->next = std::make_unique(NodeT{12, nullptr}); head->next->next = std::make_unique(NodeT{35, nullptr}); head->next->next->next = std::make_unique(NodeT{1, nullptr}); std::cout << "Size: " << count(head) << '\n'; }