Ah. Then you can use a traits-type template with specialization to "choose" the appropriate type:
Code:
template <typename T, typename edgeType>
struct edgeTypeTraits; // no impl. - just for specialization

template <typename T>
struct edgeTypeTraits<T, edge> // specialized for edge
{
    typedef boost::shared_ptr<vertex<T> > vertexPtr_t;
    typedef std::vector<vertexPtr_t>      allVertex_t;
};//edgeTypeTraits<T, edge>

template <typename T>
struct edgeTypeTraits<T, arcs> // specialized for arcs
{
    typedef boost::shared_ptr<vertex<T, arcs> > vertexPtr_t;
    typedef std::vector<vertexPtr_t>            allVertex_t;
};//edgeTypeTraits<T, edge>

template <typename T, typename edgeType = edge>
struct graph
{
    typedef typename edgeTypeTraits<T, edgeType>::vertexPtr_t vertexPtr_t;
    typedef typename edgeTypeTraits<T, edgeType>::allVertex_t allVertex_t;

    vertexPtr_t m_vp;
    allVertex_t m_av;
};//graph
gg