|
Boost : |
Subject: Re: [boost] [graph] ranges used by boost.graph not compatible with c++11 range-based-for
From: Marshall Clow (mclow.lists_at_[hidden])
Date: 2013-10-03 10:08:28
On Oct 2, 2013, at 1:57 PM, Nathan Ridge <zeratul976_at_[hidden]> wrote:
>> I noticed today that code of this form does not compile:
>>
>> typedef boost::adjacency_list<boost::vecS, boost::vecS,
>> boost::bidirectionalS, Node, Edge> Graph;
>> typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
>> typedef boost::graph_traits<Graph>::edge_descriptor Edge;
>> Graph graph = ...;
>> Vertex vertex = ...;
>> for (Edge edge: boost::out_edges(vertex, graph)) {...}
>>
>> The reason is that out_edges returns a std::pair of iterators. This
>> is a valid range in the sense of boost.range, and so is compatible
>> with BOOST_FOREACH. However, this is not a valid range in the sense
>> of c++11 range-based-for.
>>
>> It's not clear whether this can easily be changed. In a perfect world
>> these functions should probably return something like
>> boost::iterator_range which would be compatible with both boost- and
>> language-level concepts of range-ness. However, the graph
>> documentation explicitly names the return types of out_edges et. al.
>> (see [1]) as std::pairs, which eliminates some wiggle room. Is there
>> an alternate way to address this?
>
> Sadly, I don't think there s a way of turn an std::pair of iterators into
> a range-based-for-compliant range (see [1]).
>
> So, I think that if Boost.Range wants to interoperate with standard
> ranges, it will need to deprecate std::pair of iterators as a range, and
> dependent libraries will need to follow suit.
>
> Regards,
> Nate
>
> [1] http://stackoverflow.com/questions/6167598/why-was-pair-range-access-removed-from-c11
Actually, it's pretty simple:
http://cplusplusmusings.wordpress.com/2013/04/14/range-based-for-loops-and-pairs-of-iterators/
-- Marshall
Marshall Clow Idio Software <mailto:mclow.lists_at_[hidden]>
A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait).
-- Yu Suzuki
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk