| // { dg-do assemble } |
| #include<map> |
| #include<iostream> |
| #include<vector> |
| #include<string> |
| |
| using namespace std; |
| |
| // empty parameter class with a minimal set of operations |
| // if there are no weights for edges necessary |
| struct Empty |
| { |
| public: |
| Empty(int=0) {} |
| bool operator<(const Empty&) const { return true;} |
| }; |
| inline ostream& operator<<(ostream& os, const Empty&) { return os;} |
| inline istream& operator>>(istream& is, Empty& ) { return is;} |
| |
| |
| template<class VertexType, class EdgeType> |
| class Graph // { dg-message "note" } candidates |
| { |
| public: |
| // public type interface |
| typedef std::map<int, EdgeType > Successor; |
| typedef std::pair<VertexType, Successor> vertex; |
| typedef std::vector<vertex> GraphType; |
| typedef typename GraphType::iterator iterator; |
| typedef typename GraphType::const_iterator const_iterator; |
| |
| // a lot of stuff deleted .... |
| |
| private: |
| bool directed; |
| GraphType C; // container |
| ostream* pOut; |
| }; |
| |
| // all graph-methods delet |
| template<class VertexType, class EdgeType> |
| ostream& operator<<(ostream& os, Graph<VertexType,EdgeType>& G) |
| { |
| // display of vertices with successors |
| for(int i = 0; i < G.size(); ++i) // { dg-error "no member" } no size function |
| { |
| os << G[i].first << " <"; // { dg-error "14:no match" } no index operator |
| |
| // The compiler does not like this line!!!!!! |
| typename Graph<VertexType, EdgeType>::Successor::iterator |
| startN = G[i].second.begin(), // { dg-error "21:no match" } no index operator |
| endN = G[i].second.end(); // { dg-error "21:no match" } no index operator |
| |
| while(startN != endN) |
| { |
| os << G[(*startN).first].first << ' ' // { dg-error "20:no match" } no index operator |
| << (*startN).second << ' '; |
| ++startN; |
| } |
| os << ">\n"; |
| } |
| return os; |
| } |
| |
| int main() |
| { |
| // no edge weighting, therefore type Empty: |
| Graph<std::string, Empty> V(true); // { dg-error "no match" } no bool constructor |
| // ReadGraph(V, "gra1.dat"); |
| |
| // display of vertices with successors |
| cout << V; |
| |
| } |