|
Boost : |
From: Brook Milligan (brook_at_[hidden])
Date: 2007-02-22 13:41:37
I am trying to specify the requirement that types cover the
PropertyGraphConcept of the BGL. The following code illustrates a
simple test case.
#include <boost/graph/adjacency_list.hpp>
struct VertexProperties
{
typedef VertexProperties kind;
int distance;
};
struct EdgeProperties
{
typedef EdgeProperties kind;
int weight;
};
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS,
VertexProperties, EdgeProperties> graph_type;
int
main()
{
boost::function_requires< boost::PropertyGraphConcept<graph_type,
int, int VertexProperties::*> >();
return 0;
}
However, with Boost v1.33.1, the concept check yields the following
error:
/usr/pkg/include/boost/property_map.hpp:158: error: assignment of read-only
data-member `
boost::ReadablePropertyMapConcept<boost::bundle_property_map<const
graph_type, size_t, VertexProperties, const int>, int>::val'
The location of that error is associated with the indicated line
clipped out of property_map.hpp:
// property_map.hpp
template <class PMap, class Key>
struct ReadablePropertyMapConcept
{
typedef typename property_traits<PMap>::key_type key_type;
typedef typename property_traits<PMap>::reference reference;
typedef typename property_traits<PMap>::category Category;
typedef boost::readable_property_map_tag ReadableTag;
void constraints() {
function_requires< ConvertibleConcept<Category, ReadableTag> >();
val = get(pmap, k); // <== read-only assignment error
}
PMap pmap;
Key k;
typename property_traits<PMap>::value_type val;
};
Perhaps the template arguments in the concept checking are wrong; I
have found the documentation unclear on how to really use these. Any
help on how to make this work correctly is greatly appreciated.
Thanks alot.
Cheers,
Brook
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk