Boost logo

Boost Users :

Subject: [Boost-users] Boost Graph: vertex class has no copy constructor
From: Trevor Harmon (trevor.w.harmon_at_[hidden])
Date: 2010-03-25 20:23:41


Hi,

I'm using the Boost Graph library to construct a directed graph:

    typedef boost::directed_graph<BasicBlock> Graph;

The vertex class, "BasicBlock", is not my own; it comes from the LLVM
project.

Unfortunately, the declaration above causes a slew of compiler errors
(see below) that appear to be related to BasicBlock's copy
constructor. Sure enough, I checked BasicBlock.h, and its copy
constructor is declared private and is not even implemented. There
appears to be some sort of design issue that prevents this class from
having a copy constructor.

Is there some workaround for this on the Boost Graph side, or must
vertex classes always have a copy constructor?

Thanks,

Trevor

/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
In constructor ‘boost::property<Tag, T, Base>::property(const T&)
[with Tag = boost::vertex_bundle_t, T = llvm::BasicBlock, Base =
boost::no_property]’:
Clepsydra.cpp:46: instantiated from here
/Users/twharmon/Development/LLVM/llvm-2.7/llvm-2.7-src/include/llvm/
BasicBlock.h:81: error: ‘llvm::BasicBlock::BasicBlock(const
llvm::BasicBlock&)’ is private
/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
31: error: within this context
/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
In copy constructor ‘boost::property<boost::vertex_bundle_t,
llvm::BasicBlock, boost::no_property>::property(const
boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property>&)’:
/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
22: instantiated from ‘typename boost::adjacency_list<boost::listS,
boost::listS, boost::bidirectionalS,
boost::property<boost::vertex_index_t, unsigned int, typename
boost::graph_detail::vertex_prop<Prop>::type>,
boost::property<boost::edge_index_t, unsigned int, typename
boost::graph_detail::edge_prop<EdgeProp>::type>, GraphProp,
boost::listS>::vertex_descriptor boost::directed_graph<VertexProp,
EdgeProp, GraphProp>::add_vertex(const typename
boost::graph_detail::vertex_prop<Prop>::type&) [with VertexProp =
llvm::BasicBlock, EdgeProp = boost::no_property, GraphProp =
boost::no_property]’
/Users/twharmon/Development/boost_1_42_0/boost/graph/
directed_graph.hpp:454: instantiated from ‘typename
boost::directed_graph<VertexProp, EdgeProp,
GraphProp>::vertex_descriptor boost::add_vertex(const typename
boost::directed_graph<VertexProp, EdgeProp,
GraphProp>::vertex_property_type&, boost::directed_graph<VP, EP, GP>&)
[with VP = llvm::BasicBlock, EP = boost::no_property, GP =
boost::no_property]’
Clepsydra.cpp:46: instantiated from here
/Users/twharmon/Development/LLVM/llvm-2.7/llvm-2.7-src/include/llvm/
BasicBlock.h:81: error: ‘llvm::BasicBlock::BasicBlock(const
llvm::BasicBlock&)’ is private
/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
22: error: within this context
cc1plus: warnings being treated as errors
/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
In copy constructor ‘boost::property<boost::vertex_index_t, unsigned
int, boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property> >::property(const
boost::property<boost::vertex_index_t, unsigned int,
boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property> >&)’:
/Users/twharmon/Development/boost_1_42_0/boost/pending/property.hpp:
22: warning: synthesized method
‘boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property>::property(const
boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property>&)’ first required here
/Users/twharmon/Development/boost_1_42_0/boost/graph/
directed_graph.hpp: In member function ‘typename
boost::adjacency_list<boost::listS, boost::listS,
boost::bidirectionalS, boost::property<boost::vertex_index_t, unsigned
int, typename boost::graph_detail::vertex_prop<Prop>::type>,
boost::property<boost::edge_index_t, unsigned int, typename
boost::graph_detail::edge_prop<EdgeProp>::type>, GraphProp,
boost::listS>::vertex_descriptor boost::directed_graph<VertexProp,
EdgeProp, GraphProp>::add_vertex(const typename
boost::graph_detail::vertex_prop<Prop>::type&) [with VertexProp =
llvm::BasicBlock, EdgeProp = boost::no_property, GraphProp =
boost::no_property]’:
/Users/twharmon/Development/boost_1_42_0/boost/graph/
directed_graph.hpp:154: warning: synthesized method
‘boost::property<boost::vertex_index_t, unsigned int,
boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property> >::property(const
boost::property<boost::vertex_index_t, unsigned int,
boost::property<boost::vertex_bundle_t, llvm::BasicBlock,
boost::no_property> >&)’ first required here


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net