The concept checking code for the Graph concept seems to require more associated types than is called for by the documentation.
I implemented the following bare-bones graph concept:
#include <boost/graph/graph_concepts.hpp>
struct ImplicitGraph {
// Graph concept
typedef size_t vertex_descriptor;
typedef boost::undirected_tag directed_category;
typedef boost::disallow_parallel_edge_tag edge_parallel_category;
typedef boost::adjacency_graph_tag traversal_category;
};
int main (int argc, char const *argv[]) {
boost::function_requires< boost::GraphConcept<ImplicitGraph> >();
ImplicitGraph g;
return 0;
}
However, when I try to build it I get the following errors from the concept checking code:
graph_traits.hpp:30: error: no type named ‘edge_descriptor’ in ‘struct ImplicitGraph’
graph_traits.hpp:31: error: no type named ‘adjacency_iterator’ in ‘struct ImplicitGraph’
graph_traits.hpp:32: error: no type named ‘out_edge_iterator’ in ‘struct ImplicitGraph’
graph_traits.hpp:33: error: no type named ‘in_edge_iterator’ in ‘struct ImplicitGraph’
graph_traits.hpp:34: error: no type named ‘vertex_iterator’ in ‘struct ImplicitGraph’
graph_traits.hpp:35: error: no type named ‘edge_iterator’ in ‘struct ImplicitGraph’
graph_traits.hpp:41: error: no type named ‘vertices_size_type’ in ‘struct ImplicitGraph’
graph_traits.hpp:42: error: no type named ‘edges_size_type’ in ‘struct ImplicitGraph’
graph_traits.hpp:43: error: no type named ‘degree_size_type’ in ‘struct ImplicitGraph’
I would not expect the concept checker to give me these errors because these types are not part of the documented Graph concept. Also, the out_edge_iterator and in_edge_iterator don't make sense for the undirected graph I have defined here.
Is the concept checking code out of sync with the documentation, or am I misunderstanding how concept checking works?
This is Boost version 1.42 installed via Macports on OS X.