#include <list>
#include <memory>
#include <utility>
#include <vector>
template <
typename Vertex,
typename Edge,
template <typename, typename> class Container = std::vector,
typename Allocator = std::allocator<void*>
>
class GraphNode
{
public:
typedef GraphNode<Vertex, Edge, Container, Allocator> NodeType;
typedef std::pair< Edge, NodeType* > LinkType;
typedef typename Allocator::template rebind<LinkType>::other AllocatorType;
typedef Container<LinkType, AllocatorType> NeighboursType;
Vertex vertex;
NeighboursType neighbours;
};
int main() {
GraphNode<long, int> gn0;
GraphNode<long, int, std::list> gn1;
GraphNode<long, int, std::vector> gn2;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8dmVjdG9yPgoKICAgIHRlbXBsYXRlIDwKICAgICAgICB0eXBlbmFtZSBWZXJ0ZXgsIAogICAgICAgIHR5cGVuYW1lIEVkZ2UsCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgQ29udGFpbmVyID0gc3RkOjp2ZWN0b3IsCiAgICAgICAgdHlwZW5hbWUgQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8dm9pZCo+CiAgICA+CiAgICBjbGFzcyBHcmFwaE5vZGUKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIEdyYXBoTm9kZTxWZXJ0ZXgsIEVkZ2UsIENvbnRhaW5lciwgQWxsb2NhdG9yPiBOb2RlVHlwZTsKICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjwgRWRnZSwgTm9kZVR5cGUqID4gTGlua1R5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxMaW5rVHlwZT46Om90aGVyIEFsbG9jYXRvclR5cGU7CiAgICAgICAgdHlwZWRlZiBDb250YWluZXI8TGlua1R5cGUsIEFsbG9jYXRvclR5cGU+IE5laWdoYm91cnNUeXBlOwogICAgCiAgICAgICAgVmVydGV4IHZlcnRleDsKICAgICAgICBOZWlnaGJvdXJzVHlwZSBuZWlnaGJvdXJzOwogICAgfTsKCiAgICBpbnQgbWFpbigpIHsKICAgICAgR3JhcGhOb2RlPGxvbmcsIGludD4gZ24wOwogICAgICBHcmFwaE5vZGU8bG9uZywgaW50LCBzdGQ6Omxpc3Q+IGduMTsKICAgICAgR3JhcGhOb2RlPGxvbmcsIGludCwgc3RkOjp2ZWN0b3I+IGduMjsKICAgIH0=