typename property_traits<ComponentMap>::value_type
strong_components_impl
(const Graph& g,    // Input
 ComponentMap comp, // Output
 // Internal record keeping
 RootMap root,
 DiscoverTime discover_time,
 const bgl_named_params<P, T, R>& params)
{
    typedef typename graph_traits<Graph>::vertex_descriptor Vertex;
    BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept<ComponentMap, Vertex> ));
    BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept<RootMap, Vertex> ));
    typedef typename property_traits<RootMap>::value_type RootV;
    BOOST_CONCEPT_ASSERT(( ConvertibleConcept<RootV, Vertex> ));
    BOOST_CONCEPT_ASSERT(( ReadWritePropertyMapConcept<DiscoverTime, Vertex> ));

    typename property_traits<ComponentMap>::value_type total = 0;

    std::stack<Vertex> s;
    detail::tarjan_scc_visitor<ComponentMap, RootMap, DiscoverTime,
           std::stack<Vertex> >
           vis(comp, root, discover_time, total, s);
    depth_first_search(g, params.visitor(vis));
    return total;
}
 void topological_sort(VertexListGraph& g, OutputIterator result,
                       const bgl_named_params<P, T, R>& params)
 {
   typedef topo_sort_visitor<OutputIterator> TopoVisitor;
   depth_first_search(g, params.visitor(TopoVisitor(result)));
 }