// -*- c++ -*- //compile it with //g++ -ansi -pedantic //and with //g++ //I did with g++ ver 3.0.4, suse 8.0 //If the template is removed from NodeMap, then it works well. //athos@cs.elte.hu //klao@cs.elte.hu //marci@cs.elte.hu class ListGraph { public: ListGraph() { } template class NodeMap { const ListGraph& G; public: NodeMap(const ListGraph& _G) : G(_G) { } }; }; template class GraphWrapper { protected: Graph* graph; public: GraphWrapper(Graph& _graph) : graph(&_graph) { } template class NodeMap : public Graph::template NodeMap { typedef typename Graph::template NodeMap Parent; public: NodeMap(const GraphWrapper& _G) : Parent(*(_G.graph)) { } }; }; template class ResGraphWrapper : public GraphWrapper { public: ResGraphWrapper(Graph& _graph) : GraphWrapper(_graph) { } }; template class MaxFlow { const Graph* g; typedef ResGraphWrapper ResGW; public: MaxFlow(const Graph& _g) : g(&_g) { } void augmentOnShortestPath() { ResGW res_graph(*g); typename ResGW::template NodeMap pred(res_graph); } }; int main(int, char **) { ListGraph G; MaxFlow max_flow_test(G); max_flow_test.augmentOnShortestPath(); return 0; }