Opened 6 years ago
#12939 new Bugs
use of boost::graph_bundle with subgraph
Reported by: | Owned by: | Jeremiah Willcock | |
---|---|---|---|
Milestone: | To Be Determined | Component: | graph |
Version: | Boost 1.60.0 | Severity: | Problem |
Keywords: | subgraph, graph_bundle | Cc: | ioannis.nousias@… |
Description
using boost::graph_bundle with a subgraph picks up the 'vertex' access delegate. This is because boost::graph_bundle enumeration gets downgraded to an integer, which matches the first template specialization in subgraph.hpp
example:
struct VertexProperties { std::string name; }; struct EdgeProperties { std::string name; }; struct GraphProperties { std::string name; }; boost::subgraph< boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, boost::property<boost::vertex_index_t,size_t,VertexProperties>, boost::property<boost::edge_index_t,size_t,EdgeProperties>, GraphProperties> > graph; auto name = graph[boost::graph_bundle].name;
compiler error:
boost/graph/subgraph.hpp:278:24: error: no match for ternary 'operator?:' (operand types are 'bool', 'boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, boost::property<boost::vertex_index_t, long unsigned int, tpg::VertexProperties>, boost::property<boost::edge_index_t, long unsigned int, tpg::EdgeProperties>, tpg::GraphProperties>::graph_bundled {aka tpg::GraphProperties}', and 'boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, boost::property<boost::vertex_index_t, long unsigned int, tpg::VertexProperties>, boost::property<boost::edge_index_t, long unsigned int, tpg::EdgeProperties>, tpg::GraphProperties>::vertex_bundled {aka tpg::VertexProperties}') { return is_root() ? m_graph[x] : root().m_graph[local_to_global(x)]; } ^ boost/graph/subgraph.hpp: In member function 'typename boost::graph::detail::bundled_result<Graph, Descriptor>::type& boost::subgraph<Graph>::operator[](Descriptor) [with Descriptor = boost::graph_bundle_t; Graph = boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, boost::property<boost::vertex_index_t, long unsigned int, tpg::VertexProperties>, boost::property<boost::edge_index_t, long unsigned int, tpg::EdgeProperties>, tpg::GraphProperties>; typename boost::graph::detail::bundled_result<Graph, Descriptor>::type = tpg::GraphProperties]': boost/graph/subgraph.hpp:278:75: warning: control reaches end of non-void function [-Wreturn-type] { return is_root() ? m_graph[x] : root().m_graph[local_to_global(x)]; }
workaround/hack: explicitly use local_property or global_property lookup classes.
auto name = graph[boost::global_property<boost::graph_bundle_t>(boost::graph_bundle)].name;
Note:
See TracTickets
for help on using tickets.