Вы не можете заставить его скомпилироваться - то, что вы пытаетесь создать, является "бесконечным" типом.
Давайте начнем с того, что вы не можете использовать необоснованный шаблон класса в качестве аргумента шаблона. Поэтому вам нужно передать Node в std :: allocator, например:
template <class Data, class Allocator = std::allocator<Node<Data, Something> > >
class Node ...
Однако, что бы это было? Ну, std :: allocator
Хитрость в том, что распределители обязаны выделять не только аргумент шаблона, но и любой другой тип. Объявите свой класс как
template <class Data, class Allocator = std::allocator<Data> > class Node ...
Затем создайте распределитель для таких узлов:
typename Allocator::rebind<Node>::other nodeAllocator(myDataAllocator)
Этот пост vcblog о распределителях может помочь, хотя он слишком сфокусирован на итераторах.