While studying boost.graph, I stumbled upon this constructor definition:

    template <class EdgeIterator>

    adjacency_list(EdgeIterator first, EdgeIterator last,

                          vertices_size_type n,

                          edges_size_type = 0,

                          const GraphProperty& p = GraphProperty())

      : Base(n, first, last), m_property(new graph_property_type(p))

{ }

I have 2 questions here:

-          What does “edges_size_type = 0,” means here?  Assigning a value to a TYPE, instead of a parameter? Can anyone please point me to an explanation of this grammar usage?

-          Why the necessary of edges_size_type = 0 parameter,  since there’s a range pair of “EdgeIterator first, EdgeIterator last”?

 

Does anyone have an answer? Thanks.