I believe it is the index_map what causes your problem. According to this it should map each vertex to an integer in the range [ 0, num_vertices(g) ) (from 0 to num_vertices - 1) and yours goes from 1 to num_vertices.
Something like this works fine (ignoring the warning about unused variables):
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/topological_sort.hpp>
#include <boost/graph/iteration_macros.hpp>
using namespace boost;
typedef boost::adjacency_list <listS, listS, bidirectionalS,
boost::property<boost::vertex_index_t, int > > Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
typedef boost::graph_traits<Graph>::edge_descriptor Edge;
int main(int,char*[])
{
Graph graph;
std::list<Vertex> vertex_list;
typedef property_map<Graph, vertex_index_t>::type index_map_t;
index_map_t index_map = get(vertex_index, graph);
Vertex a, b, c, d, e, f, g;
a = add_vertex(graph);
b = add_vertex(graph);
c = add_vertex(graph);
d = add_vertex(graph);
e = add_vertex(graph);
clear_vertex(a, graph);
remove_vertex(a, graph);
f = add_vertex(graph);
g = add_vertex(graph);
graph_traits<Graph>::vertices_size_type current_index = 0;
BGL_FORALL_VERTICES(v,graph,Graph)
index_map[v]=current_index++;
topological_sort(graph, std::front_inserter(vertex_list));
}